na.count<-function(x) sum(is.na(x))
na.mean<-function(x) ifelse(is.nan(mean(x,na.rm=T)),NA,mean(x,na.rm=T))

#Defining the data I/O directory

## change root.path as needed
root.path<-"C:\\Users\\tfens\\R_REPOS\\Flux_processing\\Concord_R_Code\\Concord_Post_Process\\"
# root.path<-"D:\\Housen\\Flux\\Data-exploring\\02_Concord_Eden\\"
#output folder
out.path<-paste0(root.path, "02_output\\01_GAM_output\\")

#load the RDA data produced in 12-Concord_bootstrap_GAMS_all #Housen uploaded the data as rda files to google drive.


all_data <-  readRDS (file = "2022-04-20_all_data.rda" )

all_daily_data <- readRDS (file = "2022-04-20_all_data_daily.rda" )



all_filled_cum_matrix <- readRDS(file = "2022-04-20_all_filled_matrix.rda")

all_filled_matrix <- readRDS(file = "2022-04-20_all_filled_matrix.rda")

all_filled_matrix <- readRDS(file = "2022-04-20_all_predict_matrix.rda")

all_data$all_pre_data
write.csv(
  all_data$all_pre_data,
  paste0(out.path, Sys.Date(), "_all_pre_compost_data.csv"),
  quote = T,
  row.names = F
)

#Figure for cumulative filled NEE by pre and post compost and group


col.code2 <- list(col.name = c("control", "treatment"),
                 col = c("firebrick1", "deepskyblue"))

##### Figure for filled NEE
png(
    paste0(
      out.path,
      Sys.Date(),
      "_filled_cum_NEE_bygroups.png"
    ),
    width = 6.5,
    height = 3.5,
    units = "in",
    pointsize = 10,
    res = 400
  )
par(mar = c(4, 0.2, 0.5, 0.2), oma = c(0, 4, 0, 0.5), mfrow = c(1, 2))
plot(all_data[[1]]$TIMESTAMP,
     all_data[[1]]$NEE_filled_cum_control_mean,
     pch = 20,
     cex = 0.7,
     col = col.code2$col[1],
     las = 1,
     ylab = "",
     xlab = "",
     ylim = c(-100, 200))
mtext(side = 2,
      expression(Cumulative~CO[2]~flux~'('*g~C~m^{-2}*')'),
      outer = T,
      line = 2.5)
mtext(side = 1,
      "2019-2020",
      outer = F,
      line = 2.5)
points(all_data[[1]]$TIMESTAMP,
       all_data[[1]]$NEE_filled_cum_treatment_mean,
       pch = 20,
       cex = 0.7,
       col = col.code2$col[2])
lines(all_data[[1]]$TIMESTAMP,
      all_data[[1]]$NEE_filled_cum_control_q025,
      col = col.code2$col[1],
      lty = 2)
lines(all_data[[1]]$TIMESTAMP,
      all_data[[1]]$NEE_filled_cum_control_q975,
      col = col.code2$col[1],
      lty = 2)
lines(all_data[[1]]$TIMESTAMP,
      all_data[[1]]$NEE_filled_cum_treatment_q025,
      col = col.code2$col[2],
      lty = 2)
lines(all_data[[1]]$TIMESTAMP,
      all_data[[1]]$NEE_filled_cum_treatment_q975,
      col = col.code2$col[2],
      lty = 2)
legend("topleft",
       fill = col.code2$col,
       border = NA,
       legend = col.code2$col.name,
       ncol = 2,
       cex = 0.7,
       bty = "n")
abline(h = 0, col = "black")
plot(all_data[[2]]$TIMESTAMP,
     all_data[[2]]$NEE_filled_cum_control_mean,
     pch = 20,
     cex = 0.7,
     col = col.code2$col[1],
     las = 1,
     ylab = "",
     xlab = "",
     yaxt = "n",
     ylim = c(-100, 200))
mtext(side = 1,
      "2020-2021",
      outer = F,
      line = 2.5)
points(all_data[[2]]$TIMESTAMP,
       all_data[[2]]$NEE_filled_cum_treatment_mean,
       pch = 20,
       cex = 0.7,
       col = col.code2$col[2])
lines(all_data[[2]]$TIMESTAMP,
      all_data[[2]]$NEE_filled_cum_control_q025,
      col = col.code2$col[1],
      lty = 2)
lines(all_data[[2]]$TIMESTAMP,
      all_data[[2]]$NEE_filled_cum_control_q975,
      col = col.code2$col[1],
      lty = 2)
lines(all_data[[2]]$TIMESTAMP,
      all_data[[2]]$NEE_filled_cum_treatment_q025,
      col = col.code2$col[2],
      lty = 2)
lines(all_data[[2]]$TIMESTAMP,
      all_data[[2]]$NEE_filled_cum_treatment_q975,
      col = col.code2$col[2],
      lty = 2)
abline(h = 0, col = "black")
dev.off()
null device 
          1 

#figure for gap filled daily NEE. Updated to include the error range for the post compost control side daily data

col.code4 <- list(col.name = c("control", "treatment"),
                  col = c("firebrick4", "deepskyblue4"),
                  col2 = c(rgb(1, 0, 0, 0.3), rgb(0, 0, 1, 0.3)),
                  col3 = c("lightcoral", "deepskyblue4"))

##### Figure for gap-filled daily NEE
png(
    paste0(
      out.path,
      Sys.Date(),
      "_filled_daily_NEE_bygroups.png"
    ),
    width = 6.5,
    height = 3.5,
    units = "in",
    pointsize = 10,
    res = 400
  )
par(mar = c(4, 0.2, 0.5, 0.2), oma = c(0, 4, 0, 0.5), mfrow = c(1, 2))
plot(0,
     0,
     las = 1,
     ylab = "",
     xlab = "",
     ylim = c(-10, 10),
     xlim = range(all_daily_data[[1]]$Doy_water),
     type = "n")
mtext(side = 1,
      "2019-2020",
      outer = F,
      line = 2.5)
mtext(side = 2,
      expression(CO[2]~flux~'('*g~C~m^{-2}~d^{-1}*')'),
      outer = T,
      line = 2.5)
polygon(c(all_daily_data[[1]]$Doy_water,
          rev(all_daily_data[[1]]$Doy_water)),
        c(all_daily_data[[1]]$NEE_filled_control_q975,
          rev(all_daily_data[[1]]$NEE_filled_control_q025)),
        col = col.code4$col3[1],
        border = NA)
polygon(c(all_daily_data[[1]]$Doy_water,
          rev(all_daily_data[[1]]$Doy_water)),
        c(all_daily_data[[1]]$NEE_filled_treatment_q975,
          rev(all_daily_data[[1]]$NEE_filled_treatment_q025)),
        col = col.code4$col2[2],
        border = NA)
points(all_daily_data[[1]]$Doy_water,
       all_daily_data[[1]]$NEE_filled_control_mean,
       pch = 20,
       cex = 0.7,
       col = col.code4$col[1])
points(all_daily_data[[1]]$Doy_water,
       all_daily_data[[1]]$NEE_filled_treatment_mean,
       pch = 20,
       cex = 0.7,
       col = col.code4$col[2])
legend("topleft",
       fill = col.code4$col,
       border = NA,
       legend = col.code2$col.name,
       ncol = 2,
       cex = 0.7,
       bty = "n")
plot(0,
     0,
     las = 1,
     ylab = "",
     xlab = "",
     yaxt = "n",
     ylim = c(-10, 10),
     xlim = range(all_daily_data[[2]]$Doy_water),
     type = "n")
mtext(side = 1,
      "2020-2021",
      outer = F,
      line = 2.5)
polygon(c(all_daily_data[[2]]$Doy_water,
          rev(all_daily_data[[2]]$Doy_water)),
        c(all_daily_data[[2]]$NEE_filled_control_q975,
          rev(all_daily_data[[2]]$NEE_filled_control_q025)),
        col = col.code4$col3[1],
        border = NA)
polygon(c(all_daily_data[[2]]$Doy_water,
          rev(all_daily_data[[2]]$Doy_water)),
        c(all_daily_data[[2]]$NEE_filled_treatment_q975,
          rev(all_daily_data[[2]]$NEE_filled_treatment_q025)),
        col = col.code4$col2[2],
        border = NA)
points(all_daily_data[[2]]$Doy_water,
       all_daily_data[[2]]$NEE_filled_control_mean,
       pch = 20,
       cex = 0.7,
       col = col.code4$col[1])
points(all_daily_data[[2]]$Doy_water,
       all_daily_data[[2]]$NEE_filled_treatment_mean,
       pch = 20,
       cex = 0.7,
       col = col.code4$col[2])
dev.off()
null device 
          1 
## save output
saveRDS(all_daily_data,
        paste0(out.path, Sys.Date(), "_all_daily_data.rda"))

#Tommy just getting a sense of the lists and data

#Reco_mean and quantiles
plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$RECO_predict_control_mean, ylim = c(0,35) )

par(new=TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$RECO_predict_control_q975, col = 'red', ylim = c(0,35))

par(new = TRUE)
plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$RECO_predict_control_q025, col = 'blue', ylim = c(0,35))


#NEE
#1/2 hourly
plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_control_mean)


#cumulative with error
plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_cum_control_q975, col='red', ylim = c(0,200)
     )

par(new=TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_cum_control_mean, col='grey', ylim = c(0,200))

par(new = TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_cum_control_q025 , col='red', ylim = c(0,200)
     )

#Creating a new data column for respiration #combination of Day Reco_predict_mean annd NEE_filled__means #Our night time respiration data will be directly measured, while our daytime respiration data will be modeled.

#This is actually unnneccesary. Just going to use NEE- Reco predict and then force all nightime GPP to zero.



####Control side pre-compost#########################
# creating new column called RECO_control_FIN
all_data$all_pre_data$RECO_control_FIN <- (all_data$all_pre_data$RECO_predict_control_mean * 1)




#assigning all night time respiration gap fill night NEE

all_data$all_pre_data$RECO_control_FIN[(all_data$all_pre_data$Rg <= 10 )]<-
  all_data$all_pre_data$NEE_filled_control_mean [(all_data$all_pre_data$Rg <= 10 )]

#plot and summary of recon control fin (observed nighttime NEE, and modeled Reco)
plot(all_data$all_pre_data$RECO_control_FIN )


summary(all_data$all_pre_data$RECO_control_FIN)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -5.665   2.079   2.879   3.621   4.149  18.302 
#plot and summary of just modeled Reco
plot(all_data$all_pre_data$RECO_predict_control_mean)

summary(all_data$all_pre_data$RECO_predict_control_mean)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -1.169   2.101   2.879   3.621   4.131  18.302 
#Thought I had to do all this below, but really do not need to. Can just use the filled NEE (see above). Filled NEE has actual NEE values for night time plus GAM filled. This ensures both actually measured values, excluding bad data and the best modeled nigh time NEE/ Reco

#Creating observed NEE variable to be used for nighttime reco

# all_data[[1]]$NEE_control_observed[all_data[[1]]$treatment== "control_pre_compost"] <- (all_data[[1]]$NEE[all_data[[1]]$treatment == "control_pre_compost"])
#
# plot(all_data$all_pre_data$NEE_control_observed) # around 1/2 night observed reco data is neg. maybe just use modeled data?
#
# #looking at how the new variable look
# summary(all_data$all_pre_data$NEE_control_observed)
# summary(all_data$all_pre_data$RECO_control_FIN)
#
# #assigning night time measured NEE values to the associated night time respiration values
#
# all_data$all_pre_data$RECO_control_FIN[all_data$all_pre_data$Rg <= 10 & !is.na( all_data$all_pre_data$NEE_control_observed)]<-
#   all_data$all_pre_data$NEE_control_observed[all_data$all_pre_data$Rg<=10  & !is.na( all_data$all_pre_data$NEE_control_observed)]
#
#
# #seeing how this shakes out
# plot(all_data$all_pre_data$RECO_control_FIN )
#
# summary(all_data$all_pre_data$RECO_control_FIN)
#
# summary(all_data$all_pre_data$RECO_predict_control_mean)
#
# summary(all_data$all_pre_data$NEE_filled_control_mean)
#
# plot(all_data$all_pre_data$TIMESTAMP, all_data$all_pre_data$RECO_control_FIN, col = 'red', ylim = c(-10, 30))
# par(new= TRUE)
# plot(all_data$all_pre_data$TIMESTAMP, all_data$all_pre_data$RECO_predict_control_mean, col = 'blue', ylim = c(-10, 30))

##############Control side post-compost######################
#creating new column called RECO_control_FIN
all_data$all_post_data$RECO_control_FIN <- (all_data$all_post_data$RECO_predict_control_mean * 1)

#assigning all night time respiration gap fill night NEE

all_data$all_post_data$RECO_control_FIN[(all_data$all_post_data$Rg <= 10 )]<-
  all_data$all_post_data$NEE_filled_control_mean [(all_data$all_post_data$Rg <= 10 )]

plot(all_data$all_post_data$RECO_control_FIN )


summary(all_data$all_post_data$RECO_control_FIN)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -3.654   1.398   2.064   2.061   2.673  11.756 
summary(all_data$all_post_data$NEE_filled_control_mean)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-13.7967  -0.8410   1.3248   0.4075   2.3158  11.7562 
###############treatment side pre compost############################
all_data$all_pre_data$RECO_treatment_FIN <- (all_data$all_pre_data$RECO_predict_treatment_mean * 1)



###########treatment side post-compost###############
#creating new column called RECO_treatment_FIN
all_data$all_post_data$RECO_treatment_FIN <- (all_data$all_post_data$RECO_predict_treatment_mean * 1)


#assigning all night time respiration gap fill night NEE pre compost

all_data$all_pre_data$RECO_treatment_FIN[(all_data$all_pre_data$Rg <= 10 )]<-
  all_data$all_pre_data$NEE_filled_treatment_mean [(all_data$all_pre_data$Rg <= 10 )]

plot(all_data$all_pre_data$RECO_treatment_FIN )


summary(all_data$all_pre_data$RECO_treatment_FIN)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-15.914   1.935   2.978   2.961   3.946  17.985 
summary(all_data$all_pre_data$NEE_filled_treatment_mean)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-17.91950  -3.50352   1.41118  -0.07219   3.14213  18.24570 
#assigning all night time respiration gap fill night NEE post compost

all_data$all_post_data$RECO_treatment_FIN[(all_data$all_post_data$Rg <= 10 )]<-
  all_data$all_post_data$NEE_filled_treatment_mean [(all_data$all_post_data$Rg <= 10 )]

plot(all_data$all_post_data$RECO_treatment_FIN, ylim = c(0,5), col = "blue" )
par(new= TRUE)
plot(all_data$all_post_data$RECO_predict_treatment_mean, ylim = c(0,5), col = "red")


summary(all_data$all_post_data$RECO_treatment_FIN)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-10.379   1.355   2.084   2.087   2.716  14.635 
summary(all_data$all_post_data$RECO_predict_treatment_mean)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-0.4264  1.5238  2.1066  2.0869  2.6621  4.1923 
summary(all_data$all_post_data$NEE_filled_treatment_mean)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-16.46480  -2.23401   0.98957   0.02082   2.16124  14.63480 

#creating 1/2 hour GPP control and treatment side values #sum(nee) = sum(gpp+reco) #sum (nee-reco)= sum (gpp)


######Creating 1/2 hourly GPP variable for post compost##########

#control post compost(Reco predict_control mean or Reco_control_fin)
#Use Reco_predict control mean and force all nighttime GPP to zero. 
all_data$all_post_data$GPP_control_mean <- (all_data$all_post_data$NEE_filled_control_mean - all_data$all_post_data$RECO_predict_control_mean)

summary(all_data$all_post_data$GPP_control_mean)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-17.043  -2.746   0.000  -1.654   0.000   7.816 
plot(all_data$all_post_data$GPP_control_mean)


#treatment post compost
all_data$all_post_data$GPP_treatment_mean<- (all_data$all_post_data$NEE_filled_treatment_mean - all_data$all_post_data$RECO_predict_treatment_mean  )

summary(all_data$all_post_data$GPP_treatment_mean)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-20.2931  -4.2049  -0.5779  -2.0661   0.0000  11.4460 
plot(all_data$all_post_data$GPP_treatment_mean)


#######Make all night time GPP zero############ #Need to do this if using reco_predict!

#night time defined as Rg<= 10

#control post compost
all_data$all_post_data$GPP_control_mean [(all_data$all_post_data$Rg <= 10 )]<-0

plot(all_data$all_post_data$GPP_control_mean)


summary(all_data$all_post_data$GPP_control_mean)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-17.043  -2.723   0.000  -1.653   0.000   7.765 
#treatment  post compost
all_data$all_post_data$GPP_treatment_mean [(all_data$all_post_data$Rg <= 10 )]<-0

##########95% CI for GPP#####################

#making 95% confidence intervals for GPP control post compost
all_data$all_post_data$GPP_control_q025 <- (all_data$all_post_data$NEE_predict_control_q025 - all_data$all_post_data$RECO_predict_control_q025)


all_data$all_post_data$GPP_control_q975 <- (all_data$all_post_data$NEE_predict_control_q975 - all_data$all_post_data$RECO_predict_control_q975)

#making 95% confidence intervals for GPP treatment post compost
all_data$all_post_data$GPP_treatment_q025 <- (all_data$all_post_data$NEE_predict_treatment_q025 - all_data$all_post_data$RECO_predict_treatment_q025)


all_data$all_post_data$GPP_treatment_q975 <- (all_data$all_post_data$NEE_predict_treatment_q975 - all_data$all_post_data$RECO_predict_treatment_q975)

##########plotting 1/2hourly Reco and GPP############

#control post compost
plot(all_data$all_post_data$TIMESTAMP[(all_data$all_post_data$Rg > 10 )], all_data$all_post_data$GPP_control_mean[(all_data$all_post_data$Rg > 10 )], col='green', ylim = c(-12,6))


par(new=TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$RECO_predict_control_mean , col='red', ylim = c(-12,6)
     )
par(new=TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_control_mean , ylim = c(-12,6))



plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$GPP_control_mean, ylim = c(-12,6))


#treatment post compost
plot(all_data$all_post_data$TIMESTAMP[(all_data$all_post_data$Rg > 10 )], all_data$all_post_data$GPP_treatment_mean[(all_data$all_post_data$Rg > 10 )], col='green', ylim = c(-12,6))


par(new=TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$RECO_predict_treatment_mean , col='red', ylim = c(-12,6)
     )
par(new=TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_treatment_mean , ylim = c(-12,6))



plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$GPP_treatment_mean, ylim = c(-12,6))

#GPP pre compost variable

######Creating 1/2 hourly GPP variable##########

#control pre compost
all_data$all_pre_data$GPP_control_mean <- (all_data$all_pre_data$NEE_filled_control_mean - all_data$all_pre_data$RECO_predict_control_mean)

summary(all_data$all_pre_data$GPP_control_mean)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-21.990  -6.307   0.000  -3.082   0.000  10.378 
#treatment pre compost
all_data$all_pre_data$GPP_treatment_mean<- (all_data$all_pre_data$NEE_filled_treatment_mean - all_data$all_pre_data$RECO_predict_treatment_mean  )

summary(all_data$all_pre_data$GPP_treatment_mean)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-22.3992  -6.5691  -0.5098  -3.0324   0.0000  14.6568 
#######Make all night time GPP zero############ Need to do this since using Reco_predict_mean
#night time defined as Rg<= 10

# #control pre compost
all_data$all_pre_data$GPP_control_mean [(all_data$all_pre_data$Rg <= 10 )]<-0
 
# #treatment  pre compost
all_data$all_pre_data$GPP_treatment_mean [(all_data$all_pre_data$Rg <= 10 )]<-0

##########95% CI for GPP#####################

#making 95% confidence intervals for GPP control pre compost
all_data$all_pre_data$GPP_control_q025 <- (all_data$all_pre_data$NEE_predict_control_q025 - all_data$all_pre_data$RECO_predict_control_q025)


all_data$all_pre_data$GPP_control_q975 <- (all_data$all_pre_data$NEE_predict_control_q975 - all_data$all_pre_data$RECO_predict_control_q975)

#making 95% confidence intervals for GPP treatment pre compost
all_data$all_pre_data$GPP_treatment_q025 <- (all_data$all_pre_data$NEE_predict_treatment_q025 - all_data$all_pre_data$RECO_predict_treatment_q025)


all_data$all_pre_data$GPP_treatment_q975 <- (all_data$all_pre_data$NEE_predict_treatment_q975 - all_data$all_pre_data$RECO_predict_treatment_q975)

#Basic plots of control side post compost to make sure I’m on right track before making final figures

#############Cumulative GPP, RECO , NEE control side post compost growing season#####



#cumulative respiration control side
plot(cumsum(tapply(all_data$all_post_data$RECO_predict_control_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,

     xaxt='n',
     xlab='Days of the growing season',
     ylab=expression(Cumulative~Reco~GPP~NEE~'('~g~C~m^{-2}~')'),
     main='Post Compost Control Side Cumulative RECO, GPP, NEE',
     cex.lab = 0.8,
     ylim = c(-800,800),
     lty=1,
     col="red",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)
plot(cumsum(tapply(all_data$all_post_data$RECO_predict_control_q975 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,

     xaxt='n',
     xlab='Days of the growing season',
     ylab=expression(Cumulative~Reco~GPP~NEE~'('~g~C~m^{-2}~')'),
     main='Post Compost Control Side Cumulative RECO, GPP, NEE',
     cex.lab = 0.8,
     ylim = c(-800,800),
     lty=2,
     col="red",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)
plot(cumsum(tapply(all_data$all_post_data$RECO_predict_control_q025  ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,

     xaxt='n',
     xlab='Days of the growing season',
     ylab=expression(Cumulative~Reco~GPP~NEE~'('~g~C~m^{-2}~')'),
     main='Post Compost Control Side Cumulative RECO, GPP, NEE',
     cex.lab = 0.8,
     ylim = c(-800,800),
     lty=2,
     col="red",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)
#cumulative GPP control side

plot(cumsum(tapply(all_data$all_post_data$GPP_control_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,
     xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=1,
     col="green",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)

plot(cumsum(tapply(all_data$all_post_data$GPP_control_q025,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,
     xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=2,
     col="green",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)

plot(cumsum(tapply(all_data$all_post_data$GPP_control_q975 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,
     xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=2,
     col="green",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_cum_control_mean, 
      xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=1,
     col="grey",
     lwd=2,
     type="l")
     
axis(side=1,at=seq(0,360,by=30))

par(new =TRUE)
abline(h = 0, col = "black")


#############Cumulative GPP, RECO , NEE treatmett side post compost growing season#####
#cumulative respiration treatment side
plot(cumsum(tapply(all_data$all_post_data$RECO_predict_treatment_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,

     xaxt='n',
     xlab='Days of the growing season',
     ylab=expression(Cumulative~Reco~GPP~NEE~'('~g~C~m^{-2}~')'),
     main='Post Compost Treatment Side Cumulative RECO, GPP, NEE',
     cex.lab = 0.8,
     ylim = c(-800,800),
     lty=1,
     col="red",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)
plot(cumsum(tapply(all_data$all_post_data$RECO_predict_treatment_q975,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,

     xaxt='n',
     xlab='Days of the growing season',
     ylab=expression(Cumulative~Reco~GPP~NEE~'('~g~C~m^{-2}~')'),
     main='Post Compost Treatment Side Cumulative RECO, GPP, NEE',
     cex.lab = 0.8,
     ylim = c(-800,800),
     lty=2,
     col="red",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)
plot(cumsum(tapply(all_data$all_post_data$RECO_predict_treatment_q025,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,

     xaxt='n',
     xlab='Days of the growing season',
     ylab=expression(Cumulative~Reco~GPP~NEE~'('~g~C~m^{-2}~')'),
     main='Post Compost Treatment Side Cumulative RECO, GPP, NEE',
     cex.lab = 0.8,
     ylim = c(-800,800),
     lty=2,
     col="red",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)
#cumulative GPP treatment side

plot(cumsum(tapply(all_data$all_post_data$GPP_treatment_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,
     xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=1,
     col="green",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)

plot(cumsum(tapply(all_data$all_post_data$GPP_treatment_q025 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,
     xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=2,
     col="green",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)

plot(cumsum(tapply(all_data$all_post_data$GPP_treatment_q975,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48,
     xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=2,
     col="green",
     lwd=2,
     type="l")
axis(side=1,at=seq(0,360,by=30))

par(new = TRUE)

#cumulative NEE treatment side

plot(all_data$all_post_data$TIMESTAMP, all_data$all_post_data$NEE_filled_cum_treatment_mean, 
      xaxt='n',
     xlab='',
     ylab='',
     main='',
     ylim = c(-800,800),
     lty=1,
     col="grey",
     lwd=2,
     type="l")
     
axis(side=1,at=seq(0,360,by=30))

par(new =TRUE)
abline(h = 0, col = "black")

#blank
all_data$all_post_data$blank = (all_data$all_post_data$RECO_control_FIN *
                                      0)

all_data$all_post_data$blank[(all_data$all_post_data$blank == 0)] <-
  NA

#Plotting NEE variables###

####panel 1 half-hourly non-gap filled and half hourly gap filled### #panel 1/2 hourly GPP_treatment_mean and Respiration #panel 3 cumulative sums of NEE, Respiration and neg GPP

#Treatment side 1/2 hourly

summary (all_data$all_pre_data$NEE)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-17.931  -2.569   1.230   0.230   3.127  18.246    4117 
summary(all_data$all_post_data$NEE)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
-16.4648  -1.8643   0.8140   0.0759   2.1964  14.6348     2230 
head(all_data$all_pre_data$TIMESTAMP)
[1] "2019-11-01 00:00:00 +08" "2019-11-01 00:30:00 +08" "2019-11-01 01:00:00 +08" "2019-11-01 01:30:00 +08"
[5] "2019-11-01 02:00:00 +08" "2019-11-01 02:30:00 +08"
nrow(all_data$all_pre_data$NEE_predict_control_mean
        )
NULL



col.code3 <- list(col.name = c("control (modeled)", "treatment (modeled)",
                               "control (observed)", "treatment (observed)"),
                  col = c("firebrick1", "deepskyblue", "firebrick4", "deepskyblue4"))

#figure for cumulative and filled NEE and Reco

target.plot.var_nee <- c("NEE_filled_treatment_mean",
                         "GPP_treatment_mean",
                         "blank")

target.plot.var_nee.title <- c(
  expression(FC ~ '(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(GPP ~ ';' ~ Reco~'(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(Cumulative~sum~ '(' ~ g ~ C ~ m ^ {-2 } ~ ')')
)

## locate the start of each month
month.loc <- which(
  all_data$all_post_data$TIMESTAMP$mday == 1 &
    all_data$all_post_data$TIMESTAMP$hour == 0 &
    all_data$all_post_data$TIMESTAMP$min == 0
)
month.ticks <-
  substr(seq(
    all_data$all_post_data$TIMESTAMP[month.loc[1]],
    all_data$all_post_data$TIMESTAMP[month.loc[length(month.loc)]],
    by = "months"
  ), 6, 7)

## daily average values
daily_nee.tmp <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )


## convert NEE, RECO_predict_treatment_mean gpp to cumulative sum of carbon
# convert to cumulative carbon
for(ll in 2:4) {
  # convert to daily units
  daily_nee.tmp[, ll] <-
    daily_nee.tmp[, ll] * 12 / 1000000 * 1800 * 48
  daily_nee.tmp[is.na(daily_nee.tmp[, ll]), ll] <- 0
  
  # calculate cumulative sum, hard-coded with first/second years
  daily_nee.tmp[1:365, ll] <-
    cumsum(daily_nee.tmp[1:365, ll])
  daily_nee.tmp[366:nrow(daily_nee.tmp), ll] <-
    cumsum(daily_nee.tmp[366:nrow(daily_nee.tmp), ll])
  
  # set break (missing value) between two years
  daily_nee.tmp[366, ll] <- NA
}

## begin plot   
png(
  paste0(out.path, "NEE_treatment_growing_post_compost_concord",
    all_data$all_post_data$TIMESTAMP$year[1] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[1] + 1, "_",
    all_data$all_post_data$TIMESTAMP$year[nrow(all_data$all_post_data)] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[nrow(all_data$all_post_data)] + 1, "_",
    "NEE_",
    Sys.Date(), ".png"
  ),
  width = 5.5,
  height = 6,
  units = "in",
  res = 300,
  pointsize = 11,
  bg = "white"
)
par(oma = c(4, 4.5, 0.5, 0.5),
    mar = c(0, 0, 0.25, 0))

par(fig = c(0, 1, 2 / 3, 1), new = FALSE)
plot(
  all_data[[2]]$TIMESTAMP,
  all_data[[2]]$NEE_filled_treatment_mean,
  pch = 20,
  cex = 0.7,
  col = col.code3$col[1],
  las = 1,
  ylab = "",
  xlab = "",
  xaxt = "n",
  xaxs = "i",
  #yaxt = "n",
  ylim = c(-20, 20),
  cex.axis = 0.8
)

points(
  all_data[[2]]$TIMESTAMP[all_data[[2]]$treatment == "treatment_post_compost"],
  all_data[[2]]$NEE[all_data[[2]]$treatment == "treatment_post_compost"],
  pch = 20,
  cex = 0.7,
  col = col.code3$col[4]
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(a)"),
  adj = c(0, 1),
  cex = 0.9,
  
)

mtext(
  side = 2,
  target.plot.var_nee.title[[1]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

## panel b
par(fig = c(0, 1, 1 / 3, 2 / 3), new = TRUE)
plot(
  all_data$all_post_data$time.id,
  all_data$all_post_data$GPP_treatment_mean,
  xlab = "",
  ylab = "",
  cex = 0.5,
  col = "forestgreen",
  bg = "forestgreen",
  xaxt = "n",
  las = 1,
  pch = 21,
  xaxs = "i",
  ylim = c(-10, 10),
  cex.axis = 0.8
)

points(
  all_data$all_post_data$time.id,
  all_data$all_post_data$RECO_predict_treatment_mean,
  cex = 0.5,
  col = "red",
  bg = "red",
  pch = 21,
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(b)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee.title[[2]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)


## panel c
par(fig = c(0, 1, 0, 1 / 3), new = TRUE)
plot(
  daily_nee.tmp$date,
  daily_nee.tmp$daily_nee,
  type = "l",
  lwd = 1.5,
  col = "black",
  xlab = "",
  ylab = "",
  xaxt = "n",
  las = 1,
  xaxs = "i",
  ylim = c(-375, 375),
  cex.axis = 0.8
)

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_gpp,
      lwd = 1.5,
      col = "forestgreen",
      lty = 2
      )

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_reco,
      lwd = 1.5,
      col = "red",
      lty = 3
      )

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

axis(
  side = 1,
  at = all_data$all_post_data$time.id[month.loc],
  labels = month.ticks,
  tck = -.025,
  cex.axis = 0.8
)

text(
  x = all_data$all_post_data$time.id[1],
  y = 1200,
  paste0("(c)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee.title[[3]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

axis(
  side = 1,
  at = c(2019.75, 2020.5, 2021.17),
  label = c(2019, 2020, 2021),
  cex.axis = 0.8,
  tck = -.025,
  lty = 0,
  bty = "n",
  line = 0.9
)

mtext(
  side = 1,
  "Month / Year",
  line = 3,
  outer = FALSE,
  cex = 0.8
)


dev.off()
null device 
          1 

####panel 1 half-hourly non-gap filled and half hourly gap filled### #panel 2 daily GPP_treatment_mean and Respiration with error lines shaded #panel 3 cumulative sums of NEE, Respiration and neg GPP with error lines

#Treatment side Daily




col.code4 <- list(col.name = c( "treatment (modeled)","treatment (observed)"),
                               
                  col = c("deepskyblue", "deepskyblue4"))

col.code5 <- list(col.name = c("Reco", "GPP"),
                
                  col3 = c("lightcoral", "lightgreen"))




#figure for cumulative and filled NEE and Reco

target.plot.var_nee <- c("NEE_filled_treatment_mean",
                         "GPP_treatment_mean",
                         "blank")

target.plot.var_nee.title <- c(
  expression(FC ~ '(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(GPP ~ ';' ~ Reco~'(' ~ mu ~ mol ~ m ^ {-2 } ~ d ^ { -1 } ~ ')'),
  expression(Cumulative~sum~ '(' ~ g ~ C ~ m ^ {-2 } ~ ')')
)

## locate the start of each month
month.loc <- which(
  all_data$all_post_data$TIMESTAMP$mday == 1 &
    all_data$all_post_data$TIMESTAMP$hour == 0 &
    all_data$all_post_data$TIMESTAMP$min == 0
)
month.ticks <-
  substr(seq(
    all_data$all_post_data$TIMESTAMP[month.loc[1]],
    all_data$all_post_data$TIMESTAMP[month.loc[length(month.loc)]],
    by = "months"
  ), 6, 7)

## daily average values
daily_nee.tmp <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp_q025 = tapply(
      all_data$all_post_data$GPP_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gppq975 = tapply(
      all_data$all_post_data$GPP_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco025 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco975 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

#Creating a second daily value data frame that is not cum_sum for panel B
daily_nee.tmp_2 <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp_q025 = tapply(
      all_data$all_post_data$GPP_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gppq975 = tapply(
      all_data$all_post_data$GPP_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco025 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco975 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

## convert NEE, RECO_predict_treatment_mean gpp to cumulative sum of carbon
# convert to cumulative carbon
for(ll in 2:8) {
  # convert to daily units
  daily_nee.tmp[, ll] <-
    daily_nee.tmp[, ll] * 12 / 1000000 * 1800 * 48
  daily_nee.tmp[is.na(daily_nee.tmp[, ll]), ll] <- 0
  
  # calculate cumulative sum, hard-coded with first/second years
  daily_nee.tmp[1:365, ll] <-
    cumsum(daily_nee.tmp[1:365, ll])
  daily_nee.tmp[366:nrow(daily_nee.tmp), ll] <-
    cumsum(daily_nee.tmp[366:nrow(daily_nee.tmp), ll])
  
  # set break (missing value) between two years
  daily_nee.tmp[366, ll] <- NA
}

## begin plot   
png(
  paste0(out.path, "NEE_treatment_Daily_growing_post_compost_concord",
    all_data$all_post_data$TIMESTAMP$year[1] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[1] + 1, "_",
    all_data$all_post_data$TIMESTAMP$year[nrow(all_data$all_post_data)] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[nrow(all_data$all_post_data)] + 1, "_",
    "NEE_",
    Sys.Date(), ".png"
  ),
  width = 5.5,
  height = 6,
  units = "in",
  res = 300,
  pointsize = 11,
  bg = "white"
)
par(oma = c(4, 4.5, 0.5, 0.5),
    mar = c(0, 0, 0.25, 0))

par(fig = c(0, 1, 2 / 3, 1), new = FALSE)
plot(
  all_data[[2]]$TIMESTAMP,
  all_data[[2]]$NEE_filled_treatment_mean,
  pch = 20,
  cex = 0.7,
  col = col.code4$col[1],
  las = 1,
  ylab = "",
  xlab = "",
  xaxt = "n",
  xaxs = "i",
  #yaxt = "n",
  ylim = c(-15, 15),
  cex.axis = 0.8
)

points(
  all_data[[2]]$TIMESTAMP[all_data[[2]]$treatment == "treatment_post_compost"],
  all_data[[2]]$NEE[all_data[[2]]$treatment == "treatment_post_compost"],
  pch = 20,
  cex = 0.7,
  col = col.code4$col[2]
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(a)"),
  adj = c(0, 1),
  cex = 0.9,
  
)

mtext(
  side = 2,
  target.plot.var_nee.title[[1]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)
legend(
  "topleft",
  fill = col.code4$col,
  border = NA,
  legend = col.code4$col.name,
  ncol = 2,
  cex = 0.7,
  bty = "n"
)

## panel b
par(fig = c(0, 1, 1 / 3, 2 / 3), new = TRUE)
plot(
  daily_nee.tmp_2$date,
  daily_nee.tmp_2$daily_gpp,
  xlab = "",
  ylab = "",
  cex = 0,
  col = "forestgreen",
  bg = "forestgreen",
  xaxt = "n",
  las = 1,
  pch = 21,
  xaxs = "i",
  ylim = c(-10, 10),
  cex.axis = 0.8
)
polygon(c(daily_nee.tmp_2$date,
          rev(daily_nee.tmp_2$date)),
        c(daily_nee.tmp_2$daily_reco975 ,
          rev(daily_nee.tmp_2$daily_reco025)),
        col = col.code5$col3[1],
        border = NA)
polygon(c(daily_nee.tmp_2$date,
          rev(daily_nee.tmp_2$date)),
        c(daily_nee.tmp_2$daily_gppq975 ,
          rev(daily_nee.tmp_2$daily_gpp_q025)),
        col = col.code5$col3[2],
        border = NA)
points(
  daily_nee.tmp_2$date,
  daily_nee.tmp_2$daily_reco,
  cex = 0.6,
  col = "red",
  bg = "red",
  pch = 21,
)

points(
  daily_nee.tmp_2$date,
  daily_nee.tmp_2$daily_gpp,
  cex = 0.6,
  col = "forestgreen",
  bg = "forestgreen",
  pch = 21,
)


abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(b)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee.title[[2]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)


## panel c
par(fig = c(0, 1, 0, 1 / 3), new = TRUE)
plot(
  daily_nee.tmp$date,
  daily_nee.tmp$daily_nee,
  type = "l",
  lwd = 1.5,
  col = "black",
  xlab = "",
  ylab = "",
  xaxt = "n",
  las = 1,
  xaxs = "i",
  ylim = c(-600, 800),
  cex.axis = 0.8
)

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_gpp,
      lwd = 1.5,
      col = "forestgreen",
      lty = 1
      )

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_reco,
      lwd = 1.5,
      col = "red",
      lty = 1
      )

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_gpp_q025 ,
      lwd = 1,
      col = "forestgreen",
      lty = 3
      )

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_gppq975  ,
      lwd = 1,
      col = "forestgreen",
      lty = 3
      )

lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_reco025,
      lwd = 1,
      col = "red",
      lty = 3
      )
lines(daily_nee.tmp$date,
      daily_nee.tmp$daily_reco975,
      lwd = 1,
      col = "red",
      lty = 3
      )

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

axis(
  side = 1,
  at = all_data$all_post_data$time.id[month.loc],
  labels = month.ticks,
  tck = -.025,
  cex.axis = 0.8
)

text(
  x = all_data$all_post_data$time.id[1],
  y = 1200,
  paste0("(c)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee.title[[3]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

axis(
  side = 1,
  at = c(2019.75, 2020.92, 2021.17),
  label = c(2019, 2020, 2021),
  cex.axis = 0.8,
  tck = -.025,
  lty = 0,
  bty = "n",
  line = 0.9
)

mtext(
  side = 1,
  "Month / Year",
  line = 3,
  outer = FALSE,
  cex = 0.8
)


dev.off()
null device 
          1 

#Appendix figure showing observed and modeled treatment side post compost application

####panel 1 half-hourly non-gap filled and half hourly gap filled### #panel 2 daily GPP_treatment_mean and Respiration with error lines shaded

col.code4 <- list(col.name = c( "treatment (modeled)","treatment (observed)"),
                               
                  col = c("deepskyblue", "deepskyblue4"))

col.code5 <- list(col.name = c("Reco", "GPP"),
                
                  col3 = c("lightcoral", "lightgreen"))




#figure for cumulative and filled NEE and Reco

target.plot.var_nee <- c("NEE_filled_treatment_mean",
                         "GPP_treatment_mean",
                         "blank")

target.plot.var_nee.title <- c(
  expression(FC ~ '(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(GPP ~ ';' ~ Reco~'(' ~ mu ~ mol ~ m ^ {-2 } ~ d ^ { -1 } ~ ')'),
  expression(Cumulative~sum~ '(' ~ g ~ C ~ m ^ {-2 } ~ ')')
)

## locate the start of each month
month.loc <- which(
  all_data$all_post_data$TIMESTAMP$mday == 1 &
    all_data$all_post_data$TIMESTAMP$hour == 0 &
    all_data$all_post_data$TIMESTAMP$min == 0
)
month.ticks <-
  substr(seq(
    all_data$all_post_data$TIMESTAMP[month.loc[1]],
    all_data$all_post_data$TIMESTAMP[month.loc[length(month.loc)]],
    by = "months"
  ), 6, 7)

## daily average values
daily_nee.tmp <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp_q025 = tapply(
      all_data$all_post_data$GPP_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gppq975 = tapply(
      all_data$all_post_data$GPP_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco025 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco975 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

#Creating a second daily value data frame that is not cum_sum for panel B
daily_nee.tmp_2 <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_treatment_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp_q025 = tapply(
      all_data$all_post_data$GPP_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gppq975 = tapply(
      all_data$all_post_data$GPP_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco025 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco975 = tapply(
      all_data$all_post_data$RECO_predict_treatment_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

## convert NEE, RECO_predict_treatment_mean gpp to cumulative sum of carbon
# convert to cumulative carbon
for(ll in 2:8) {
  # convert to daily units
  daily_nee.tmp[, ll] <-
    daily_nee.tmp[, ll] * 12 / 1000000 * 1800 * 48
  daily_nee.tmp[is.na(daily_nee.tmp[, ll]), ll] <- 0
  
  # calculate cumulative sum, hard-coded with first/second years
  daily_nee.tmp[1:365, ll] <-
    cumsum(daily_nee.tmp[1:365, ll])
  daily_nee.tmp[366:nrow(daily_nee.tmp), ll] <-
    cumsum(daily_nee.tmp[366:nrow(daily_nee.tmp), ll])
  
  # set break (missing value) between two years
  daily_nee.tmp[366, ll] <- NA
}

## begin plot   
png(
  paste0(out.path, "NEE_treatment_appendix_model_observed_daily",
    all_data$all_post_data$TIMESTAMP$year[1] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[1] + 1, "_",
    all_data$all_post_data$TIMESTAMP$year[nrow(all_data$all_post_data)] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[nrow(all_data$all_post_data)] + 1, "_",
    "NEE_",
    Sys.Date(), ".png"
  ),
  width = 5.5,
  height = 6,
  units = "in",
  res = 300,
  pointsize = 11,
  bg = "white"
)
par(oma = c(4, 4.5, 0.5, 0.5),
    mar = c(0, 0, 0.25, 0))

par(fig = c(0, 1, 1 /2, 1), new = FALSE)
plot(
  all_data[[2]]$TIMESTAMP,
  all_data[[2]]$NEE_filled_treatment_mean,
  pch = 20,
  cex = 0.7,
  col = col.code4$col[1],
  las = 1,
  ylab = "",
  xlab = "",
  xaxt = "n",
  xaxs = "i",
  #yaxt = "n",
  ylim = c(-15, 15),
  cex.axis = 0.8
)

points(
  all_data[[2]]$TIMESTAMP[all_data[[2]]$treatment == "treatment_post_compost"],
  all_data[[2]]$NEE[all_data[[2]]$treatment == "treatment_post_compost"],
  pch = 20,
  cex = 0.7,
  col = col.code4$col[2]
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(a)"),
  adj = c(0, 1),
  cex = 0.9,
  
)



#adding panel label
mtext(
  "A", side=2, line=3, at=14, las = 1
  )

mtext(
  side = 2,
  target.plot.var_nee.title[[1]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

legend(
  "topleft",
  fill = col.code4$col,
  border = NA,
  legend = col.code4$col.name,
  ncol = 2,
  cex = 0.7,
  bty = "n"
)

## panel b
par(fig = c(0, 1, 0, 1 / 2), new = TRUE)
plot(
  daily_nee.tmp_2$date,
  daily_nee.tmp_2$daily_gpp,
  xlab = "",
  ylab = "",
  cex = 0,
  col = "forestgreen",
  bg = "forestgreen",
  xaxt = "n",
  las = 1,
  pch = 21,
  xaxs = "i",
  ylim = c(-10, 10),
  cex.axis = 0.8
)
polygon(c(daily_nee.tmp_2$date,
          rev(daily_nee.tmp_2$date)),
        c(daily_nee.tmp_2$daily_reco975 ,
          rev(daily_nee.tmp_2$daily_reco025)),
        col = col.code5$col3[1],
        border = NA)
polygon(c(daily_nee.tmp_2$date,
          rev(daily_nee.tmp_2$date)),
        c(daily_nee.tmp_2$daily_gppq975 ,
          rev(daily_nee.tmp_2$daily_gpp_q025)),
        col = col.code5$col3[2],
        border = NA)
points(
  daily_nee.tmp_2$date,
  daily_nee.tmp_2$daily_reco,
  cex = 0.6,
  col = "red",
  bg = "red",
  pch = 21,
)

points(
  daily_nee.tmp_2$date,
  daily_nee.tmp_2$daily_gpp,
  cex = 0.6,
  col = "forestgreen",
  bg = "forestgreen",
  pch = 21,
)


abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(b)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee.title[[2]],
  line = 3,
  outer = FALSE,
  cex = 0.8
  
  
)

axis(
  side = 1,
  at = all_data$all_post_data$time.id[month.loc],
  labels = month.ticks,
  tck = -.025,
  cex.axis = 0.8
)

text(
  x = all_data$all_post_data$time.id[1],
  y = 1200,
  paste0("(c)"),
  adj = c(0, 1),
  cex = 0.9
)


axis(
  side = 1,
  at = c(2019.75, 2020.92, 2021.17),
  label = c(2019, 2020, 2021),
  cex.axis = 0.8,
  tck = -.025,
  lty = 0,
  bty = "n",
  line = 0.9
)

mtext(
  side = 1,
  "Month / Year",
  line = 3,
  outer = FALSE,
  cex = 0.8
)
mtext(
  "B", side=2, line=3, at=9, las = 1
  )



dev.off()
null device 
          1 

####panel 1 Control half-hourly non-gap filled and half hourly gap filled### #panel 2 1/2 hourly GPP_control_mean and Respiration with error lines shaded #panel 3 cumulative sums of Control NEE, Respiration and GPP

#Control side side with 1/2 hourly data in panel 2



#figure for cumulative and filled NEE and Reco

target.plot.var_nee_cont <- c("NEE_filled_control_mean",
                         "GPP_control_mean",
                         "blank")

target.plot.var_nee_cont.title <- c(
  expression(FC ~ '(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(GPP ~ ';' ~ Reco~'(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(Cumulative~sum~ '(' ~ g ~ C ~ m ^ {-2 } ~ ')')
)

## locate the start of each month
month.loc <- which(
  all_data$all_post_data$TIMESTAMP$mday == 1 &
    all_data$all_post_data$TIMESTAMP$hour == 0 &
    all_data$all_post_data$TIMESTAMP$min == 0
)
month.ticks <-
  substr(seq(
    all_data$all_post_data$TIMESTAMP[month.loc[1]],
    all_data$all_post_data$TIMESTAMP[month.loc[length(month.loc)]],
    by = "months"
  ), 6, 7)

## daily average values
daily_nee.tmp_cont <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

## convert NEE, RECO_predict_treatment_mean gpp to cumulative sum of carbon
# convert to cumulative carbon
for(ll in 2:4) {
  # convert to daily units
  daily_nee.tmp_cont[, ll] <-
    daily_nee.tmp_cont[, ll] * 12 / 1000000 * 1800 * 48
  daily_nee.tmp_cont[is.na(daily_nee.tmp_cont[, ll]), ll] <- 0
  
  # calculate cumulative sum, hard-coded with first/second years
  daily_nee.tmp_cont[1:365, ll] <-
    cumsum(daily_nee.tmp_cont[1:365, ll])
  daily_nee.tmp_cont[366:nrow(daily_nee.tmp_cont), ll] <-
    cumsum(daily_nee.tmp_cont[366:nrow(daily_nee.tmp_cont), ll])
  
  # set break (missing value) between two years
  daily_nee.tmp_cont[366, ll] <- NA
}

## begin plot   
png(
  paste0(out.path, "NEE_CONTROL_growing_post_compost_concord",
    all_data$all_post_data$TIMESTAMP$year[1] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[1] + 1, "_",
    all_data$all_post_data$TIMESTAMP$year[nrow(all_data$all_post_data)] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[nrow(all_data$all_post_data)] + 1, "_",
    "NEE_",
    Sys.Date(), ".png"
  ),
  width = 5.5,
  height = 6,
  units = "in",
  res = 300,
  pointsize = 11,
  bg = "white"
)
par(oma = c(4, 4.5, 0.5, 0.5),
    mar = c(0, 0, 0.25, 0))

par(fig = c(0, 1, 2 / 3, 1), new = FALSE)
plot(
  all_data[[2]]$TIMESTAMP,
  all_data[[2]]$NEE_filled_treatment_mean,
  pch = 20,
  cex = 0.7,
  col = col.code4$col[1],
  las = 1,
  ylab = "",
  xlab = "",
  xaxt = "n",
  xaxs = "i",
  #yaxt = "n",
  ylim = c(-20, 20),
  cex.axis = 0.8
)

points(
  all_data[[2]]$TIMESTAMP[all_data[[2]]$treatment == "control_post_compost"],
  all_data[[2]]$NEE[all_data[[2]]$treatment == "control_post_compost"],
  pch = 20,
  cex = 0.7,
  col = col.code4$col[4]
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp_cont$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(a)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee_cont.title[[1]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

## panel b
par(fig = c(0, 1, 1 / 3, 2 / 3), new = TRUE)
plot(
  all_data$all_post_data$time.id,
  all_data$all_post_data$GPP_control_mean,
  xlab = "",
  ylab = "",
  cex = 0.5,
  col = "forestgreen",
  bg = "forestgreen",
  xaxt = "n",
  las = 1,
  pch = 21,
  xaxs = "i",
  ylim = c(-10, 10),
  cex.axis = 0.8
)

points(
  all_data$all_post_data$time.id,
  all_data$all_post_data$RECO_predict_control_mean,
  cex = 0.5,
  col = "red",
  bg = "red",
  pch = 21,
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp_cont$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(b)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee_cont.title[[2]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)


## panel c
par(fig = c(0, 1, 0, 1 / 3), new = TRUE)
plot(
  daily_nee.tmp_cont$date,
  daily_nee.tmp_cont$daily_nee,
  type = "l",
  lwd = 1.5,
  col = "black",
  xlab = "",
  ylab = "",
  xaxt = "n",
  las = 1,
  xaxs = "i",
  ylim = c(-375, 375),
  cex.axis = 0.8
)

lines(daily_nee.tmp_cont$date,
      daily_nee.tmp_cont$daily_gpp,
      lwd = 1.5,
      col = "forestgreen",
      lty = 2
      )

lines(daily_nee.tmp_cont$date,
      daily_nee.tmp_cont$daily_reco,
      lwd = 1.5,
      col = "red",
      lty = 3
      )

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp_cont$date[366], lwd= 1.5, col = "black")

axis(
  side = 1,
  at = all_data$all_post_data$time.id[month.loc],
  labels = month.ticks,
  tck = -.025,
  cex.axis = 0.8
)

text(
  x = all_data$all_post_data$time.id[1],
  y = 1200,
  paste0("(c)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee_cont.title[[3]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

axis(
  side = 1,
  at = c(2019.75, 2020.5, 2021.17),
  label = c(2019, 2020, 2021),
  cex.axis = 0.8,
  tck = -.025,
  lty = 0,
  bty = "n",
  line = 0.9
)

mtext(
  side = 1,
  "Month / Year",
  line = 3,
  outer = FALSE,
  cex = 0.8
)


dev.off()
null device 
          1 

####panel 1 Control half-hourly non-gap filled and half hourly gap filled### #panel 2 daily GPP_control_mean and Respiration with error lines shaded #panel 3 cumulative sums of Control NEE, Respiration and neg GPP with error lines

#control side daily data in panel 2

 col.code6 <- list(col.name = c( "control (modeled)","control (observed)"),
                               
                  col = c("firebrick1", "firebrick4"))





#figure for cumulative and filled NEE and Reco

target.plot.var_nee_control_daily <- c("NEE_filled_control_mean",
                         "GPP_control_mean",
                         "blank")

target.plot.var_nee_control_daily.title <- c(
  expression(FC ~ '(' ~ mu ~ mol ~ m ^ {-2 } ~ s ^ { -1 } ~ ')'),
  expression(GPP ~ ';' ~ Reco~'(' ~ mu ~ mol ~ m ^ {-2 } ~ d ^ { -1 } ~ ')'),
  expression(Cumulative~sum~ '(' ~ g ~ C ~ m ^ {-2 } ~ ')')
)

## locate the start of each month
month.loc <- which(
  all_data$all_post_data$TIMESTAMP$mday == 1 &
    all_data$all_post_data$TIMESTAMP$hour == 0 &
    all_data$all_post_data$TIMESTAMP$min == 0
)
month.ticks <-
  substr(seq(
    all_data$all_post_data$TIMESTAMP[month.loc[1]],
    all_data$all_post_data$TIMESTAMP[month.loc[length(month.loc)]],
    by = "months"
  ), 6, 7)

## daily average values
daily_nee.tmp_controlside <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp_q025 = tapply(
      all_data$all_post_data$GPP_control_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gppq975 = tapply(
      all_data$all_post_data$GPP_control_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco025 = tapply(
      all_data$all_post_data$RECO_predict_control_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco975 = tapply(
      all_data$all_post_data$RECO_predict_control_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

#Creating a second daily value data frame that is not cum_sum for panel B
daily_nee.tmp_controlside_2 <-
  data.frame(
    date = tapply(
      all_data$all_post_data$time.id,
      all_data$all_post_data$Doy_water,
      min
    ),
    daily_nee = tapply(
      all_data$all_post_data$NEE_filled_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp = tapply(
      all_data$all_post_data$GPP_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco = tapply(
      all_data$all_post_data$RECO_predict_control_mean,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gpp_q025 = tapply(
      all_data$all_post_data$GPP_control_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_gppq975 = tapply(
      all_data$all_post_data$GPP_control_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco025 = tapply(
      all_data$all_post_data$RECO_predict_control_q025,
      all_data$all_post_data$Doy_water,
      na.mean
    ),
    daily_reco975 = tapply(
      all_data$all_post_data$RECO_predict_control_q975,
      all_data$all_post_data$Doy_water,
      na.mean
    )
  )

## convert NEE, RECO_predict_control_mean gpp to cumulative sum of carbon
# convert to cumulative carbon
for(ll in 2:8) {
  # convert to daily units
  daily_nee.tmp_controlside[, ll] <-
    daily_nee.tmp_controlside[, ll] * 12 / 1000000 * 1800 * 48
  daily_nee.tmp_controlside[is.na(daily_nee.tmp_controlside[, ll]), ll] <- 0
  
  # calculate cumulative sum, hard-coded with first/second years
  daily_nee.tmp_controlside[1:365, ll] <-
    cumsum(daily_nee.tmp_controlside[1:365, ll])
  daily_nee.tmp_controlside[366:nrow(daily_nee.tmp_controlside), ll] <-
    cumsum(daily_nee.tmp_controlside[366:nrow(daily_nee.tmp_controlside), ll])
  
  # set break (missing value) between two years
  daily_nee.tmp_controlside[366, ll] <- NA
}

## begin plot   
png(
  paste0(out.path, "NEE_control_Daily_growing_post_compost_concord",
    all_data$all_post_data$TIMESTAMP$year[1] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[1] + 1, "_",
    all_data$all_post_data$TIMESTAMP$year[nrow(all_data$all_post_data)] + 1900, "_",
    all_data$all_post_data$TIMESTAMP$yday[nrow(all_data$all_post_data)] + 1, "_",
    "NEE_",
    Sys.Date(), ".png"
  ),
  width = 5.5,
  height = 6,
  units = "in",
  res = 300,
  pointsize = 11,
  bg = "white"
)
par(oma = c(4, 4.5, 0.5, 0.5),
    mar = c(0, 0, 0.25, 0))

par(fig = c(0, 1, 2 / 3, 1), new = FALSE)
plot(
  all_data[[2]]$TIMESTAMP,
  all_data[[2]]$NEE_filled_control_mean,
  pch = 20,
  cex = 0.7,
  col = col.code6$col[1],
  las = 1,
  ylab = "",
  xlab = "",
  xaxt = "n",
  xaxs = "i",
  #yaxt = "n",
  ylim = c(-15, 15),
  cex.axis = 0.8
)

points(
  all_data[[2]]$TIMESTAMP[all_data[[2]]$treatment == "control_post_compost"],
  all_data[[2]]$NEE[all_data[[2]]$treatment == "control_post_compost"],
  pch = 20,
  cex = 0.7,
  col = col.code6$col[2]
)

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp_controlside$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(a)"),
  adj = c(0, 1),
  cex = 0.9,
  
)

mtext(
  side = 2,
  target.plot.var_nee_control_daily.title[[1]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)
legend(
  "topleft",
  fill = col.code6$col,
  border = NA,
  legend = col.code6$col.name,
  ncol = 2,
  cex = 0.7,
  bty = "n"
)

## panel b
par(fig = c(0, 1, 1 / 3, 2 / 3), new = TRUE)
plot(
  daily_nee.tmp_controlside_2$date,
  daily_nee.tmp_controlside_2$daily_gpp,
  xlab = "",
  ylab = "",
  cex = 0,
  col = "forestgreen",
  bg = "forestgreen",
  xaxt = "n",
  las = 1,
  pch = 21,
  xaxs = "i",
  ylim = c(-10, 10),
  cex.axis = 0.8
)
polygon(c(daily_nee.tmp_controlside_2$date,
          rev(daily_nee.tmp_controlside_2$date)),
        c(daily_nee.tmp_controlside_2$daily_reco975 ,
          rev(daily_nee.tmp_controlside_2$daily_reco025)),
        col = col.code5$col3[1],
        border = NA)
polygon(c(daily_nee.tmp_controlside_2$date,
          rev(daily_nee.tmp_controlside_2$date)),
        c(daily_nee.tmp_controlside_2$daily_gppq975 ,
          rev(daily_nee.tmp_controlside_2$daily_gpp_q025)),
        col = col.code5$col3[2],
        border = NA)
points(
  daily_nee.tmp_controlside_2$date,
  daily_nee.tmp_controlside_2$daily_reco,
  cex = 0.6,
  col = "red",
  bg = "red",
  pch = 21,
)

points(
  daily_nee.tmp_controlside_2$date,
  daily_nee.tmp_controlside_2$daily_gpp,
  cex = 0.6,
  col = "forestgreen",
  bg = "forestgreen",
  pch = 21,
)


abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp_controlside$date[366], lwd= 1.5, col = "black")

text(
  x = all_data$all_post_data$time.id[1],
  y = 30,
  paste0("(b)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee_control_daily.title[[2]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)


## panel c
par(fig = c(0, 1, 0, 1 / 3), new = TRUE)
plot(
  daily_nee.tmp_controlside$date,
  daily_nee.tmp_controlside$daily_nee,
  type = "l",
  lwd = 1.5,
  col = "black",
  xlab = "",
  ylab = "",
  xaxt = "n",
  las = 1,
  xaxs = "i",
  ylim = c(-600, 800),
  cex.axis = 0.8
)

lines(daily_nee.tmp_controlside$date,
      daily_nee.tmp_controlside$daily_gpp,
      lwd = 1.5,
      col = "forestgreen",
      lty = 1
      )

lines(daily_nee.tmp_controlside$date,
      daily_nee.tmp_controlside$daily_reco,
      lwd = 1.5,
      col = "red",
      lty = 1
      )

lines(daily_nee.tmp_controlside$date,
      daily_nee.tmp_controlside$daily_gpp_q025 ,
      lwd = 1,
      col = "forestgreen",
      lty = 3
      )

lines(daily_nee.tmp_controlside$date,
      daily_nee.tmp_controlside$daily_gppq975  ,
      lwd = 1,
      col = "forestgreen",
      lty = 3
      )

lines(daily_nee.tmp_controlside$date,
      daily_nee.tmp_controlside$daily_reco025,
      lwd = 1,
      col = "red",
      lty = 3
      )
lines(daily_nee.tmp_controlside$date,
      daily_nee.tmp_controlside$daily_reco975,
      lwd = 1,
      col = "red",
      lty = 3
      )

abline(
  v = 2020 + 290 / 366,
  col = "red",
  lwd = 2,
  lty = 4
)
abline(h = 0, col = "black")
abline(v = daily_nee.tmp_controlside$date[366], lwd= 1.5, col = "black")

axis(
  side = 1,
  at = all_data$all_post_data$time.id[month.loc],
  labels = month.ticks,
  tck = -.025,
  cex.axis = 0.8
)

text(
  x = all_data$all_post_data$time.id[1],
  y = 1200,
  paste0("(c)"),
  adj = c(0, 1),
  cex = 0.9
)

mtext(
  side = 2,
  target.plot.var_nee_control_daily.title[[3]],
  line = 3,
  outer = FALSE,
  cex = 0.8
)

axis(
  side = 1,
  at = c(2019.75, 2020.92, 2021.17),
  label = c(2019, 2020, 2021),
  cex.axis = 0.8,
  tck = -.025,
  lty = 0,
  bty = "n",
  line = 0.9
)

mtext(
  side = 1,
  "Month / Year",
  line = 3,
  outer = FALSE,
  cex = 0.8
)


dev.off()
null device 
          1 

#Cumlative sum Reco control side pre compost application with CI’s

cumsum(tapply(all_data$all_pre_data$RECO_predict_control_mean,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
         1          2          3          4          5 
  1.018558   1.517265   1.933566   2.997678   4.517920 
         6          7          8          9         10 
  6.467492   9.070431  12.335729  14.977789  17.351610 
        11         12         13         14         15 
 20.202573  23.570593  26.953766  31.553771  37.315138 
        16         17         18         19         20 
 42.799904  47.708266  51.926821  56.347299  60.520131 
        21         22         23         24         25 
 63.336093  65.712075  68.034734  70.425435  73.017981 
        26         27         28         29         30 
 74.966400  77.867475  80.218900  82.335965  84.561258 
        31         32         33         34         35 
 87.642691  91.753907  96.172485 100.478985 104.616095 
        36         37         38         39         40 
108.774436 112.941625 117.453755 121.906032 126.496191 
        41         42         43         44         45 
131.073908 135.712040 140.500195 144.881659 148.357128 
        46         47         48         49         50 
150.862489 152.890973 154.771717 157.529570 160.463212 
        51         52         53         54         55 
162.854742 164.915754 166.834201 168.520052 170.208046 
        56         57         58         59         60 
172.069845 173.695339 175.290398 177.360839 179.274880 
        61         62         63         64         65 
181.178295 183.498034 186.230667 188.968437 191.843933 
        66         67         68         69         70 
194.871520 198.024217 200.901187 203.896772 207.028310 
        71         72         73         74         75 
209.745644 212.697463 215.854212 219.022998 221.584351 
        76         77         78         79         80 
224.465189 226.949396 228.705088 231.033237 233.604268 
        81         82         83         84         85 
236.258673 238.481091 241.245598 244.277939 247.389927 
        86         87         88         89         90 
250.870087 254.263278 257.290902 260.284917 263.297285 
        91         92         93         94         95 
266.446982 269.533920 272.604734 275.381499 277.856506 
        96         97         98         99        100 
279.911123 281.971396 284.602967 287.485559 290.680260 
       101        102        103        104        105 
293.551523 296.266711 299.605007 303.171124 306.864141 
       106        107        108        109        110 
310.739882 314.525911 318.360181 322.538665 326.322461 
       111        112        113        114        115 
330.118534 333.849196 337.655678 341.526317 345.187727 
       116        117        118        119        120 
349.309382 353.508311 358.296185 363.367933 368.966584 
       121        122        123        124        125 
374.267862 377.632636 380.099120 384.175885 389.738167 
       126        127        128        129        130 
395.416022 400.135907 403.181515 405.529043 407.658710 
       131        132        133        134        135 
410.178151 414.445117 420.062777 424.998437 427.634785 
       136        137        138        139        140 
429.856978 431.706527 433.447346 435.334460 437.400839 
       141        142        143        144        145 
439.752200 442.014354 444.627155 446.693187 448.789884 
       146        147        148        149        150 
450.512854 451.884791 453.426109 455.041054 456.546206 
       151        152        153        154        155 
459.032642 462.838856 467.866117 472.342749 477.224466 
       156        157        158        159        160 
480.996570 482.000821 482.567512 482.737502 484.203695 
       161        162        163        164        165 
485.940018 489.158471 492.530256 496.630540 502.383112 
       166        167        168        169        170 
509.451599 517.630030 526.799117 534.952202 542.484574 
       171        172        173        174        175 
550.116811 557.572100 564.700426 573.772520 585.341235 
       176        177        178        179        180 
598.236792 612.550376 627.003636 640.699238 655.788548 
       181        182 
670.291377 683.192409 
cumsum(tapply(all_data$all_pre_data$RECO_predict_control_q025,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
 -3.98324084  -8.53221103 -13.11177581 -16.56801958 
           5            6            7            8 
-19.24103997 -21.15085443 -22.09948929 -21.93134766 
           9           10           11           12 
-22.63654160 -23.95107528 -24.71130687 -24.61261006 
          13           14           15           16 
-24.56544909 -23.08207089 -21.26533854 -19.58575473 
          17           18           19           20 
-18.72101253 -18.79911390 -18.65428873 -19.06422514 
          21           22           23           24 
-21.40951650 -24.42515147 -27.35688607 -30.06316853 
          25           26           27           28 
-32.65299172 -34.99485606 -33.95759033 -33.08781840 
          29           30           31           32 
-32.41492317 -31.74777007 -31.01664290 -28.31226207 
          33           34           35           36 
-24.95282877 -22.28852254 -19.52480033 -17.19353804 
          37           38           39           40 
-14.94004971 -12.39730116  -9.59648657  -6.62698194 
          41           42           43           44 
 -3.73527322  -1.27213282   0.51986316   2.39018120 
          45           46           47           48 
  4.08016942   5.06748302   5.22316249   5.20703997 
          49           50           51           52 
  5.84139162   6.75767681   6.66185967   6.57412463 
          53           54           55           56 
  6.95685899   6.76944121   7.09211471   7.84770632 
          57           58           59           60 
  7.53456422   6.44945614   6.48689720   6.36928739 
          61           62           63           64 
  6.47835601   7.08886077   7.60021729   8.38297088 
          65           66           67           68 
  9.43214447  10.55294236  11.55189776  11.83138853 
          69           70           71           72 
 12.98684202  14.51914632  15.20292188  16.44940410 
          73           74           75           76 
 17.74243888  19.10926025  19.44757888  20.29303727 
          77           78           79           80 
 20.32104736  18.58533844  19.34597483  20.45258349 
          81           82           83           84 
 21.50885219  21.38119238  21.11568198  21.30506307 
          85           86           87           88 
 19.97582887  17.04195552  10.70747048   6.68819087 
          89           90           91           92 
  3.74987562   1.69325490  -0.44198127  -4.69553701 
          93           94           95           96 
 -9.15299400 -12.92272092 -13.40169795 -13.53006559 
          97           98           99          100 
-13.94859251 -13.01814756 -11.87971694 -10.16814247 
         101          102          103          104 
 -8.32626481  -6.93601966  -5.20973804  -3.45555749 
         105          106          107          108 
 -1.66907386   0.47266359   2.57403821   4.78260104 
         109          110          111          112 
  7.41523170   9.87144516  11.80819673  13.98525071 
         113          114          115          116 
 16.06312994  18.51246166  20.51352899  22.71720539 
         117          118          119          120 
 24.96088649  27.43723039  29.86736005  32.35820641 
         121          122          123          124 
 34.75900657  36.58341568  37.02327373  38.94918908 
         125          126          127          128 
 41.04885078  43.00857488  44.10218257  43.78095758 
         129          130          131          132 
 42.60979211  41.07938612  39.92264646  39.95191611 
         133          134          135          136 
 40.77322839  41.26275448  40.18707971  38.73643413 
         137          138          139          140 
 35.51441647  32.61873525  30.12663087  27.47236173 
         141          142          143          144 
 24.93000104  21.94184719  19.28260681  15.78315340 
         145          146          147          148 
 12.62273769   8.98182616   4.37758843  -0.01471713 
         149          150          151          152 
 -4.18473907  -8.70066761 -12.45842032 -15.11703509 
         153          154          155          156 
-16.33175159 -18.28417370 -19.61802769 -23.01899705 
         157          158          159          160 
-29.92124404 -37.36572445 -46.01640655 -52.66743424 
         161          162          163          164 
-59.10786247 -63.38701246 -67.55862963 -70.68766144 
         165          166          167          168 
-71.61199308 -70.31629943 -67.43732777 -62.14653025 
         169          170          171          172 
-57.05790594 -52.69248921 -48.21763098 -43.17297483 
         173          174          175          176 
-39.51291156 -34.08150537 -27.57690913 -21.26464666 
         177          178          179          180 
-14.95408241  -8.73762489  -2.93443186   2.49499373 
         181          182 
  7.57496132  11.97916886 
cumsum(tapply(all_data$all_pre_data$RECO_predict_control_q975 ,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
   6.035452   11.581554   16.761808   22.232748   27.728455 
          6           7           8           9          10 
  33.237893   39.169743   45.468913   51.148259   56.680550 
         11          12          13          14          15 
  62.647002   68.909933   75.108078   82.456706   91.541691 
         16          17          18          19          20 
 100.376133  108.638250  116.253907  124.039650  131.658607 
         21          22          23          24          25 
 138.033620  144.000963  149.869677  155.784305  161.972937 
         26          27          28          29          30 
 166.736731  171.222647  174.803624  178.286421  182.233646 
         31          32          33          34          35 
 188.106903  194.253906  199.958921  206.161352  211.864250 
         36          37          38          39          40 
 217.776653  223.721030  230.271521  236.790183  243.712145 
         41          42          43          44          45 
 250.655746  258.439889  266.940203  273.816786  279.240160 
         46          47          48          49          50 
 283.166567  287.013052  290.270090  294.840879  299.411522 
         51          52          53          54          55 
 303.329177  306.875963  310.167358  313.236888  315.776245 
         56          57          58          59          60 
 318.782284  322.055625  325.734943  329.574222  333.201684 
         61          62          63          64          65 
 336.860524  341.138657  345.655323  350.372531  355.192796 
         66          67          68          69          70 
 361.539417  370.263404  379.388147  388.076518  395.057689 
         71          72          73          74          75 
 401.773797  409.119861  418.221190  427.347319  433.170939 
         76          77          78          79          80 
 441.222198  447.824268  452.783615  456.501769  460.526931 
         81          82          83          84          85 
 465.410430  469.294381  474.241298  479.504507  485.546269 
         86          87          88          89          90 
 493.089142  500.829087  507.201210  513.402030  519.125182 
         91          92          93          94          95 
 525.177613  531.329048  537.371980  542.582536  547.276368 
         96          97          98          99         100 
 551.266377  555.385201  559.507155  563.973013  568.657535 
        101         102         103         104         105 
 572.703030  576.994137  582.275701  587.649199  593.321849 
        106         107         108         109         110 
 599.196684  604.914405  610.460170  616.713103  622.110322 
        111         112         113         114         115 
 628.374309  634.256235  640.488399  646.227829  651.993739 
        116         117         118         119         120 
 658.546484  665.230238  672.789683  680.787906  689.561745 
        121         122         123         124         125 
 697.456739  702.286452  706.793688  713.053196  722.041634 
        126         127         128         129         130 
 731.197402  739.402840  745.876736  751.895498  757.818875 
        131         132         133         134         135 
 764.260101  773.177652  784.322928  794.555452  801.747531 
        136         137         138         139         140 
 808.908326  817.815819  826.824601  836.457672  846.956932 
        141         142         143         144         145 
 857.687991  868.248765  879.205705  888.717938  898.258074 
        146         147         148         149         150 
 907.798286  917.747534  927.909818  938.053556  948.277637 
        151         152         153         154         155 
 959.103011  971.318247  984.210922  996.513510 1008.814236 
        156         157         158         159         160 
1020.470221 1029.924058 1039.884379 1050.134217 1060.506182 
        161         162         163         164         165 
1070.811146 1082.514032 1094.176872 1106.710440 1120.568246 
        166         167         168         169         170 
1134.973784 1149.715414 1163.796496 1175.895005 1187.250578 
        171         172         173         174         175 
1198.548294 1208.498739 1219.571193 1232.672796 1249.672515 
        176         177         178         179         180 
1269.562896 1292.360814 1315.434721 1337.223769 1361.999538 
        181         182 
1385.608710 1406.296062 

#Cumlative sum GPP control side pre compost application with CI’s

cumsum(tapply(all_data$all_pre_data$GPP_control_mean ,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
  -0.6068978   -0.9810985   -0.9691959   -1.1333696 
           5            6            7            8 
  -1.3839861   -2.0808702   -3.3685294   -4.8280678 
           9           10           11           12 
  -6.2530937   -7.1906373   -8.1935658   -9.7100122 
          13           14           15           16 
 -10.8643933  -13.1641878  -16.3272762  -18.8921621 
          17           18           19           20 
 -21.0255466  -22.7897893  -24.9622262  -26.6663005 
          21           22           23           24 
 -29.0154298  -31.4396397  -33.9997613  -36.4348900 
          25           26           27           28 
 -38.9712794  -40.9530989  -41.0140883  -40.9870994 
          29           30           31           32 
 -40.8941683  -40.3724127  -40.4934864  -40.5417685 
          33           34           35           36 
 -40.4781428  -38.8337791  -37.7153261  -36.7529319 
          37           38           39           40 
 -36.0502987  -36.1693548  -36.9392567  -37.9731384 
          41           42           43           44 
 -38.9802492  -39.8816805  -40.8913955  -42.5448520 
          45           46           47           48 
 -43.9455858  -44.8335938  -45.7821701  -46.1864936 
          49           50           51           52 
 -47.2002886  -48.0563188  -48.2874585  -49.2095615 
          53           54           55           56 
 -50.2572265  -51.4531126  -52.8700482  -54.2607800 
          57           58           59           60 
 -55.6921038  -56.9639940  -58.8799935  -60.6273020 
          61           62           63           64 
 -62.1192548  -64.1888554  -66.4060911  -68.8777677 
          65           66           67           68 
 -71.0441508  -72.8627186  -74.6997126  -77.6643488 
          69           70           71           72 
 -80.0135566  -82.5284880  -84.6177928  -86.9998667 
          73           74           75           76 
 -89.4827907  -92.5239125  -94.6214105  -96.8105687 
          77           78           79           80 
 -98.4757626 -101.1942178 -103.6238707 -105.6641362 
          81           82           83           84 
-107.8832822 -109.2865674 -111.9072731 -114.4911228 
          85           86           87           88 
-117.2910071 -120.8640065 -123.8900472 -126.7917120 
          89           90           91           92 
-130.3006525 -133.8825212 -137.9076650 -141.6836389 
          93           94           95           96 
-145.7101585 -149.2979969 -152.1603298 -154.5888944 
          97           98           99          100 
-157.2892468 -160.6379054 -164.3551646 -167.9928056 
         101          102          103          104 
-171.2650433 -174.1191368 -177.0775121 -180.8110359 
         105          106          107          108 
-186.3196404 -190.9795592 -195.7684236 -200.3673776 
         109          110          111          112 
-204.5583167 -208.8157100 -212.8771848 -216.9467267 
         113          114          115          116 
-220.6142341 -224.9666655 -229.4475133 -233.5535638 
         117          118          119          120 
-237.1081591 -241.5258620 -245.4779294 -249.7061100 
         121          122          123          124 
-254.6132475 -258.1313758 -260.8554404 -264.4238498 
         125          126          127          128 
-268.5934979 -274.0593668 -279.1298404 -283.5637353 
         129          130          131          132 
-287.1904573 -290.5901673 -293.3358885 -297.8119551 
         133          134          135          136 
-302.4584323 -307.7156476 -312.5067610 -314.9959924 
         137          138          139          140 
-317.6882342 -321.5755831 -326.2589319 -331.7708997 
         141          142          143          144 
-337.8102170 -343.2791967 -348.7994589 -354.9415330 
         145          146          147          148 
-360.5466851 -366.2871518 -371.6062326 -376.9154164 
         149          150          151          152 
-381.3162711 -385.1356318 -389.4638263 -394.3926848 
         153          154          155          156 
-399.7544046 -404.4787093 -410.2111943 -415.6421914 
         157          158          159          160 
-419.1806664 -423.3371056 -426.4197553 -430.1145834 
         161          162          163          164 
-433.3180860 -437.3022429 -442.8975620 -448.1020951 
         165          166          167          168 
-453.3896935 -458.4421979 -464.4237754 -471.7407759 
         169          170          171          172 
-478.7445384 -484.8457536 -491.2902667 -497.1036534 
         173          174          175          176 
-502.7736193 -508.6290032 -516.2001259 -524.5242755 
         177          178          179          180 
-533.3606807 -542.2220001 -550.9911210 -561.4832389 
         181          182 
-571.8835723 -581.6260497 
cumsum(tapply(all_data$all_pre_data$GPP_control_q025,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
            1             2             3             4 
   0.94558711    2.63050177    4.65862854    6.27934651 
            5             6             7             8 
   7.56561054    8.32625087    8.45157555    8.05326581 
            9            10            11            12 
   8.14538127    8.48660769    9.18716656    9.13469319 
           13            14            15            16 
   9.20544826    7.59413984    5.52227906    3.83179171 
           17            18            19            20 
   3.08307847    2.73553707    1.79203665    1.31035308 
           21            22            23            24 
   0.03358712   -1.86369013   -4.29156100   -6.77603035 
           25            26            27            28 
  -9.65392069  -12.32838697  -12.81719800  -12.63683294 
           29            30            31            32 
 -12.51844501  -12.11341069  -12.10388384  -12.32820863 
           33            34            35            36 
 -12.58385435  -11.35534988  -10.10806233   -9.60718624 
           37            38            39            40 
  -9.19395536   -9.30726878  -10.28423810  -10.98605726 
           41            42            43            44 
 -11.95023164  -12.44015996  -12.69577587  -13.79865988 
           45            46            47            48 
 -14.91056954  -15.52213037  -15.94191873  -15.98780723 
           49            50            51            52 
 -16.75864913  -17.66566071  -17.51034863  -18.02413650 
           53            54            55            56 
 -18.77884297  -19.45620572  -20.83936610  -21.79322214 
           57            58            59            60 
 -22.57868853  -22.85863332  -24.61930251  -25.81716732 
           61            62            63            64 
 -26.60911463  -28.40338150  -30.19716436  -32.39231421 
           65            66            67            68 
 -34.22129188  -35.75030241  -37.28522070  -39.65453764 
           69            70            71            72 
 -41.88513120  -44.48969775  -45.88176921  -47.90037320 
           73            74            75            76 
 -50.06782695  -52.84163366  -54.75394086  -56.58720882 
           77            78            79            80 
 -58.02964943  -59.81621386  -62.04326415  -63.73753227 
           81            82            83            84 
 -65.63584398  -66.36349366  -67.95345424  -69.86911527 
           85            86            87            88 
 -71.49576996  -73.03771291  -72.80243572  -73.34957593 
           89            90            91            92 
 -75.01426000  -77.09233752  -79.63103245  -81.12235781 
           93            94            95            96 
 -82.65675775  -83.84153429  -86.07702251  -87.93011657 
           97            98            99           100 
 -89.42849942  -92.27891725  -95.42893430  -99.06106496 
          101           102           103           104 
-102.34414273 -104.78039367 -107.29539875 -110.79303896 
          105           106           107           108 
-115.98067760 -120.64052818 -125.29147633 -129.68219782 
          109           110           111           112 
-133.56149833 -137.34708600 -141.31073868 -145.16471667 
          113           114           115           116 
-148.59336619 -152.85171608 -157.07334467 -160.84660878 
          117           118           119           120 
-163.82405270 -167.41845720 -170.88646853 -174.39100611 
          121           122           123           124 
-178.53328378 -181.74262753 -183.79692313 -186.33284176 
          125           126           127           128 
-189.77582043 -194.57486987 -199.14513060 -203.28247219 
          129           130           131           132 
-206.56821515 -209.61018585 -211.91779209 -215.80423687 
          133           134           135           136 
-219.65405906 -224.23088901 -228.79854747 -230.84014350 
          137           138           139           140 
-232.64457044 -235.86446329 -240.03112753 -245.20842776 
          141           142           143           144 
-250.96412217 -256.14733803 -261.58399253 -267.86914374 
          145           146           147           148 
-274.16702743 -280.57581951 -286.21510192 -291.10630863 
          149           150           151           152 
-294.59569392 -296.93416451 -299.45034066 -302.13794198 
          153           154           155           156 
-305.00499258 -306.95555106 -309.96683363 -312.69723752 
          157           158           159           160 
-313.30456482 -314.02095993 -313.54931064 -314.16003578 
          161           162           163           164 
-314.42504764 -315.61913487 -318.67232287 -321.87009754 
          165           166           167           168 
-325.63742955 -329.54193779 -334.69054266 -342.34672983 
          169           170           171           172 
-349.85709728 -355.88419690 -362.01809874 -367.56230006 
          173           174           175           176 
-372.16254263 -376.72233620 -382.26073194 -388.32209662 
          177           178           179           180 
-393.97218202 -399.22738506 -404.68381769 -410.97591382 
          181           182 
-417.56755149 -424.26251410 
cumsum(tapply(all_data$all_pre_data$GPP_control_q975 ,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
  -2.415176   -4.684920   -6.713123   -8.656301  -10.554526 
          6           7           8           9          10 
 -12.672176  -15.066591  -17.789613  -20.089185  -22.487769 
         11          12          13          14          15 
 -24.773466  -27.151680  -29.279539  -32.198364  -36.184983 
         16          17          18          19          20 
 -39.847949  -42.926722  -45.805863  -48.792839  -51.316592 
         21          22          23          24          25 
 -54.436803  -57.378502  -60.359450  -63.131737  -65.956356 
         26          27          28          29          30 
 -67.909098  -67.731525  -67.610046  -67.545999  -67.000293 
         31          32          33          34          35 
 -67.501597  -67.816999  -68.185809  -66.015769  -64.200341 
         36          37          38          39          40 
 -63.106259  -62.317527  -62.392728  -63.454835  -64.741897 
         41          42          43          44          45 
 -66.361967  -67.975439  -69.841344  -72.118492  -73.822739 
         46          47          48          49          50 
 -75.001764  -76.148035  -76.673444  -77.771392  -79.047096 
         51          52          53          54          55 
 -79.285620  -80.374369  -81.542836  -83.031867  -84.520710 
         56          57          58          59          60 
 -86.113971  -87.891788  -89.760104  -91.968723  -94.071857 
         61          62          63          64          65 
 -95.816224  -98.191107 -100.541928 -103.210452 -105.696558 
         66          67          68          69          70 
-108.357034 -112.031714 -116.602484 -120.814616 -123.823434 
         71          72          73          74          75 
-126.888637 -130.278587 -134.706067 -139.640500 -142.253228 
         76          77          78          79          80 
-145.849522 -148.209600 -151.699402 -154.636507 -156.813701 
         81          82          83          84          85 
-159.387502 -161.066072 -164.064907 -167.210179 -170.580109 
         86          87          88          89          90 
-175.116777 -179.021464 -182.581920 -186.776403 -190.677128 
         91          92          93          94          95 
-195.058366 -199.453152 -203.879054 -207.658802 -210.708788 
         96          97          98          99         100 
-214.186038 -217.349169 -220.987204 -224.613171 -228.562198 
        101         102         103         104         105 
-232.144165 -235.579225 -239.216001 -243.298956 -248.727439 
        106         107         108         109         110 
-253.900421 -258.995871 -263.873501 -268.670983 -273.185716 
        111         112         113         114         115 
-277.993780 -282.609892 -287.007917 -291.673798 -296.647549 
        116         117         118         119         120 
-301.619718 -306.023388 -310.922687 -316.058823 -321.417108 
        121         122         123         124         125 
-326.907426 -330.413305 -334.090763 -338.231377 -343.655749 
        126         127         128         129         130 
-349.855765 -355.364438 -360.132906 -364.110879 -368.036032 
        131         132         133         134         135 
-371.389029 -376.798792 -382.719889 -389.031352 -394.754083 
        136         137         138         139         140 
-398.262026 -402.806448 -408.993048 -416.189542 -424.335748 
        141         142         143         144         145 
-432.831012 -440.476397 -448.122753 -455.946171 -463.199857 
        146         147         148         149         150 
-471.226149 -479.182129 -487.244223 -494.083610 -500.515224 
        151         152         153         154         155 
-507.330480 -515.214463 -523.633490 -531.670577 -540.444561 
        156         157         158         159         160 
-548.818838 -555.543957 -563.316082 -570.457768 -577.662803 
        161         162         163         164         165 
-584.032036 -591.150004 -599.353190 -606.929299 -614.364080 
        166         167         168         169         170 
-621.285244 -628.827711 -636.750550 -644.281450 -651.457539 
        171         172         173         174         175 
-659.182780 -665.771101 -673.044556 -680.615896 -690.362301 
        176         177         178         179         180 
-701.010812 -713.194245 -725.904678 -738.234433 -752.588975 
        181         182 
-766.539823 -778.970721 

#Cumlative sum Reco control side post compost application with CI’s


#Reco Cumsum
cumsum(tapply(all_data$all_post_data$RECO_predict_control_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
  0.6836607   1.5385510   2.5120066   3.4281574   4.8052893 
          6           7           8           9          10 
  6.3771841   7.0750782   7.6770860   9.0379044  10.3841561 
         11          12          13          14          15 
 11.6884741  13.1400178  14.7330553  16.2908555  17.9068565 
         16          17          18          19          20 
 19.6506667  21.4116179  23.1909294  24.9386742  26.7025539 
         21          22          23          24          25 
 28.3660081  29.7671302  31.4181495  32.9631360  34.6121927 
         26          27          28          29          30 
 35.9427433  37.2587164  38.4288327  39.3199165  40.2071456 
         31          32          33          34          35 
 41.2433594  42.1732404  42.9830760  43.7845742  44.5246586 
         36          37          38          39          40 
 45.2410848  46.1961715  47.3857948  48.3801868  49.5093677 
         41          42          43          44          45 
 50.5953342  51.8994561  53.2073196  54.3892645  55.4779478 
         46          47          48          49          50 
 56.7792727  58.8221343  60.5310318  62.1797241  63.7974026 
         51          52          53          54          55 
 65.4166379  67.2550348  69.0349187  70.6201354  72.5763637 
         56          57          58          59          60 
 74.8772111  76.9485650  78.9988737  81.2802987  83.7434461 
         61          62          63          64          65 
 86.6491688  89.4373368  92.2569655  95.0395029  98.1359506 
         66          67          68          69          70 
100.9510838 103.2244627 105.7299733 107.9450334 109.8190888 
         71          72          73          74          75 
111.4453362 113.0929159 115.0144316 117.0474033 119.4419604 
         76          77          78          79          80 
121.4580811 123.5242996 125.7497518 128.0361234 130.0391979 
         81          82          83          84          85 
131.8315639 133.2952674 134.5988048 135.8110933 137.0400760 
         86          87          88          89          90 
137.5431718 137.4553702 137.1513808 138.8477938 141.7199560 
         91          92          93          94          95 
144.8199803 148.2537424 151.9158282 155.9315416 159.4763535 
         96          97          98          99         100 
162.7643552 165.9837410 169.1601587 172.1288488 175.1336317 
        101         102         103         104         105 
179.6856422 184.2461628 188.0144232 191.4490574 195.2045716 
        106         107         108         109         110 
197.6830005 200.7028988 202.9280779 204.6531266 206.0980140 
        111         112         113         114         115 
207.9721733 209.6771037 211.4799109 214.1260222 216.8697049 
        116         117         118         119         120 
219.4458529 221.9212768 224.4478156 226.9652286 228.9433034 
        121         122         123         124         125 
230.8812059 232.9919796 235.3237164 237.5585353 240.0381047 
        126         127         128         129         130 
242.6667903 245.2940726 247.9557189 250.7040759 253.0839619 
        131         132         133         134         135 
256.0351456 259.3460674 262.7349770 266.0966795 268.6889144 
        136         137         138         139         140 
271.4801226 274.5296599 277.8443973 281.1831887 284.2600765 
        141         142         143         144         145 
287.4263334 290.5397363 293.2891133 295.8139436 298.4364524 
        146         147         148         149         150 
301.0259544 303.5875080 306.1052336 308.6224593 311.1378701 
        151         152         153         154         155 
313.6814345 316.4045736 319.1889335 321.6747005 324.0997897 
        156         157         158         159         160 
326.5542878 329.2165947 331.7241091 334.5217297 337.1091017 
        161         162         163         164         165 
339.8676992 342.7666727 345.6905727 348.6578380 351.3324252 
        166         167         168         169         170 
354.1878165 356.9351655 359.6049453 362.3148558 365.2022727 
        171         172         173         174         175 
368.3045377 370.7430761 372.7974354 374.7661834 376.5453847 
        176         177         178         179         180 
378.0496140 379.6402144 381.3579480 383.1679345 385.0748371 
        181 
386.7698375 
#lower bound CI
cumsum(tapply(all_data$all_post_data$RECO_predict_control_q025,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
 -1.4821082  -2.7307099  -3.5604128  -4.2765855  -4.7702397 
          6           7           8           9          10 
 -4.6735843  -4.7434472  -5.1475794  -5.2903741  -5.2596883 
         11          12          13          14          15 
 -5.2726989  -5.0398897  -4.2798573  -3.6957956  -3.1628107 
         16          17          18          19          20 
 -2.4780522  -1.8392650  -1.6294335  -0.9018073   0.2732740 
         21          22          23          24          25 
  1.3458613   1.8923070   2.8930250   3.5427426   4.3969389 
         26          27          28          29          30 
  4.9999518   5.7595465   5.6822106   5.3967360   5.2542905 
         31          32          33          34          35 
  5.4834753   5.4050509   5.2325570   5.0487369   4.7481456 
         36          37          38          39          40 
  4.4408825   4.7176594   5.3308876   5.4671453   5.7713000 
         41          42          43          44          45 
  5.8540922   6.0998911   6.1791746   5.8018210   5.1192187 
         46          47          48          49          50 
  4.6015755   5.1604869   5.3406350   5.4106024   5.3221318 
         51          52          53          54          55 
  4.8676276   5.8320794   6.6907898   7.0534286   8.0665353 
         56          57          58          59          60 
  9.4469858  10.5489135  11.7177044  12.5436547  12.8048534 
         61          62          63          64          65 
 14.3749602  15.7220685  17.1070985  18.5822979  20.4196712 
         66          67          68          69          70 
 21.9878325  22.8939789  24.3913985  25.4690957  25.7162941 
         71          72          73          74          75 
 25.7646285  25.7955298  26.5373413  27.4989216  29.2876488 
         76          77          78          79          80 
 30.3543865  31.6160343  33.2848219  35.0869088  36.5765479 
         81          82          83          84          85 
 37.5400826  37.7770245  37.9073692  38.1861707  38.3482589 
         86          87          88          89          90 
 37.1338932  33.6225848  25.9209852   1.9493551 -39.7762296 
         91          92          93          94          95 
-65.5072690 -78.4584854 -81.2010751 -83.1672704 -82.0930247 
         96          97          98          99         100 
-80.1132539 -78.3083882 -76.7978222 -76.1176013 -75.9159108 
        101         102         103         104         105 
-73.8610978 -71.4387298 -69.6176658 -68.9101702 -67.6221491 
        106         107         108         109         110 
-69.5729149 -70.3234677 -72.4980289 -75.5838262 -77.7300131 
        111         112         113         114         115 
-79.1374585 -80.2616610 -80.2786106 -78.5200245 -76.9241831 
        116         117         118         119         120 
-75.3162387 -73.5977347 -71.9852750 -70.7765258 -69.9993028 
        121         122         123         124         125 
-69.5034198 -68.9690225 -68.1856259 -67.6066389 -67.0697494 
        126         127         128         129         130 
-66.3930769 -65.7955310 -65.2364948 -64.8545429 -64.8368598 
        131         132         133         134         135 
-65.1969286 -64.6689245 -63.5973509 -62.5096476 -62.3565033 
        136         137         138         139         140 
-62.3372628 -61.8112125 -60.3087073 -58.5671748 -57.1416236 
        141         142         143         144         145 
-55.5888903 -53.7090223 -52.0379028 -50.7007218 -49.5875307 
        146         147         148         149         150 
-48.5501823 -47.4946491 -46.1797560 -44.5656940 -43.0163312 
        151         152         153         154         155 
-41.5681496 -40.3653568 -39.0808737 -37.7230858 -36.4569216 
        156         157         158         159         160 
-35.2188592 -33.9103726 -32.7384663 -31.5172364 -30.4786369 
        161         162         163         164         165 
-29.6201889 -28.8352679 -28.2942169 -27.2490828 -26.5248768 
        166         167         168         169         170 
-25.6712742 -25.0710887 -24.8535949 -25.2620390 -25.6933973 
        171         172         173         174         175 
-24.6978876 -24.0930376 -23.7635026 -23.8978053 -24.0812870 
        176         177         178         179         180 
-24.7603951 -25.8462287 -26.9467330 -28.2722558 -30.0277546 
        181 
-31.9205730 
#upper bound CI
cumsum(tapply(all_data$all_post_data$RECO_predict_control_q975 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
         1          2          3          4          5 
  3.270686   6.573843   9.794791  12.685424  16.374993 
         6          7          8          9         10 
 20.067618  21.532268  23.112494  26.169107  28.881433 
        11         12         13         14         15 
 31.333352  34.088725  36.494408  38.923490  41.557720 
        16         17         18         19         20 
 44.181433  46.779067  49.684798  52.315970  54.698380 
        21         22         23         24         25 
 56.967678  59.228771  61.422153  63.737362  66.061942 
        26         27         28         29         30 
 68.056191  69.918885  72.520655  74.544142  76.370333 
        31         32         33         34         35 
 78.188466  80.187986  81.908205  83.601628  85.255653 
        36         37         38         39         40 
 86.855295  88.444698  90.238484  92.124685  94.124435 
        41         42         43         44         45 
 96.328623  99.027064 102.168120 105.520506 109.025426 
        46         47         48         49         50 
112.811932 116.646830 119.916906 123.386434 127.006207 
        51         52         53         54         55 
131.395277 134.228423 136.940823 139.743565 142.697234 
        56         57         58         59         60 
145.933031 148.918685 151.837005 156.161082 161.552226 
        61         62         63         64         65 
167.118521 172.725284 178.155731 182.738208 187.622623 
        66         67         68         69         70 
192.419589 196.224781 199.884510 203.128139 206.368474 
        71         72         73         74         75 
209.348829 212.347101 215.313480 218.241070 221.239923 
        76         77         78         79         80 
224.065444 226.793416 229.511634 232.255188 234.745365 
        81         82         83         84         85 
237.285875 239.778934 242.055071 244.361011 247.080115 
        86         87         88         89         90 
249.009274 252.084780 254.917469 269.863133 297.773631 
        91         92         93         94         95 
316.830876 329.543814 337.610651 345.996303 352.064944 
        96         97         98         99        100 
356.778794 361.548050 366.355781 371.259501 376.831132 
       101        102        103        104        105 
386.130198 394.041498 400.526351 407.067012 414.162892 
       106        107        108        109        110 
420.070435 426.525389 431.773490 436.575701 440.724133 
       111        112        113        114        115 
444.700880 448.183641 451.347778 454.899778 458.649717 
       116        117        118        119        120 
462.095034 465.486887 469.035504 474.127882 477.288568 
       121        122        123        124        125 
480.487766 483.876533 487.813726 491.963180 496.930402 
       126        127        128        129        130 
502.408810 508.350334 514.583044 521.576948 528.012542 
       131        132        133        134        135 
535.601479 543.618292 551.425512 559.446148 566.007965 
       136        137        138        139        140 
573.102526 580.083984 586.659861 592.886473 598.663414 
       141        142        143        144        145 
604.439375 609.503826 613.406666 616.920027 620.588902 
       146        147        148        149        150 
624.430597 628.451762 632.104923 635.536813 638.977599 
       151        152        153        154        155 
642.533235 646.751053 651.338738 655.229982 658.986415 
       156        157        158        159        160 
662.924076 667.433273 671.866848 676.822352 681.604201 
       161        162        163        164        165 
686.675749 692.266499 697.996122 703.310657 708.424488 
       166        167        168        169        170 
713.725411 719.042749 724.497585 730.311170 736.380351 
       171        172        173        174        175 
741.963209 747.236031 752.320212 757.741679 763.017926 
       176        177        178        179        180 
768.418430 774.076475 779.686264 785.268961 790.771413 
       181 
795.459037 

#Cumulative sum GPP control side post compost application with CI’s


#GPP Cumsum
cumsum(tapply(all_data$all_post_data$GPP_control_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
   0.5727985    1.2580111    1.5534492    1.8519151 
           5            6            7            8 
   2.4489729    1.7882448    1.3415414    0.6009846 
           9           10           11           12 
  -0.6332844   -1.4497152   -1.9699734   -2.8535612 
          13           14           15           16 
  -3.2009131   -3.7972899   -4.8546682   -5.8417725 
          17           18           19           20 
  -5.8554100   -5.8584201   -6.1131957   -6.3150359 
          21           22           23           24 
  -6.8361602   -7.3019664   -7.9380776   -8.3413320 
          25           26           27           28 
  -9.1988337   -9.8641102  -10.6136242  -11.2995091 
          29           30           31           32 
 -11.6251665  -12.3098995  -12.8282593  -13.3815193 
          33           34           35           36 
 -13.8647499  -14.0968815  -14.5196470  -15.0072550 
          37           38           39           40 
 -15.2916004  -15.7314820  -16.2682990  -16.6218118 
          41           42           43           44 
 -16.8231389  -16.5965795  -16.0871436  -15.8474088 
          45           46           47           48 
 -15.6067182  -15.2376428  -14.9206547  -14.7210389 
          49           50           51           52 
 -14.9509662  -14.9679808  -15.3059966  -15.6178247 
          53           54           55           56 
 -15.9285261  -16.3533304  -16.4713018  -16.7929973 
          57           58           59           60 
 -17.2691661  -17.8226117  -18.4313890  -19.0861167 
          61           62           63           64 
 -20.1012280  -20.9814547  -21.1396056  -21.5871166 
          65           66           67           68 
 -21.8041286  -22.6986507  -23.4577852  -24.2956514 
          69           70           71           72 
 -25.1324726  -25.8163144  -26.5914136  -27.3260265 
          73           74           75           76 
 -27.7886115  -28.2920318  -29.2630785  -30.4771433 
          77           78           79           80 
 -31.3562657  -32.0113915  -32.8355570  -34.1968441 
          81           82           83           84 
 -35.0361439  -35.6160231  -36.0434900  -36.4044427 
          85           86           87           88 
 -36.3596624  -36.5646847  -36.3993499  -39.6858454 
          89           90           91           92 
 -39.5018672  -40.6131422  -41.9938500  -43.3387127 
          93           94           95           96 
 -44.5733205  -46.2898102  -48.0465973  -49.7969081 
          97           98           99          100 
 -51.5249195  -53.1005696  -54.5994581  -55.8681030 
         101          102          103          104 
 -58.0576827  -60.2716668  -61.7658259  -63.8833217 
         105          106          107          108 
 -66.0702411  -67.5344054  -68.9520738  -70.5143407 
         109          110          111          112 
 -72.2306897  -74.1942928  -75.5516127  -77.2559314 
         113          114          115          116 
 -79.3244625  -81.4588307  -83.7640812  -86.1522129 
         117          118          119          120 
 -88.6043709  -91.4611418  -94.4238981  -96.8501744 
         121          122          123          124 
 -99.5641713 -102.1349227 -104.9607511 -108.2484214 
         125          126          127          128 
-111.3185021 -114.3107563 -117.4928450 -120.6920807 
         129          130          131          132 
-123.8570347 -126.6286985 -129.5997448 -133.0044985 
         133          134          135          136 
-136.9614294 -140.3943221 -144.2316012 -148.6382790 
         137          138          139          140 
-152.3894658 -155.7895313 -159.5967400 -164.2278146 
         141          142          143          144 
-168.8348376 -173.8201969 -178.3335019 -182.1083623 
         145          146          147          148 
-186.4211204 -190.3898580 -193.8715630 -196.7846800 
         149          150          151          152 
-200.2427209 -203.3167897 -206.5032639 -209.4749243 
         153          154          155          156 
-213.2061521 -217.8553778 -222.1428714 -226.8142125 
         157          158          159          160 
-231.3967711 -235.9940570 -239.5178652 -243.3546377 
         161          162          163          164 
-246.6523785 -249.7118000 -252.8290228 -256.2726342 
         165          166          167          168 
-259.6865973 -263.3674285 -266.9623654 -270.3037202 
         169          170          171          172 
-273.0111845 -276.5234737 -280.5619705 -283.9763748 
         173          174          175          176 
-287.5993282 -291.0585811 -293.9048153 -296.1567475 
         177          178          179          180 
-299.3149336 -302.3854103 -304.9171797 -307.3608331 
         181 
-310.2486675 
#comparison of GPP cum sum using reco predict

#making the comparison variable
all_data$all_post_data$GPP_control_with_pred_Reco <- (all_data$all_post_data$NEE_filled_control_mean - all_data$all_post_data$RECO_predict_control_mean)


#cumsum the comparison variable
cumsum(tapply(all_data$all_post_data$GPP_control_with_pred_Reco,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
   0.5727985    1.2580111    1.5534492    1.8519151 
           5            6            7            8 
   2.4489729    1.7882448    1.3613392    0.5681962 
           9           10           11           12 
  -0.6660728   -1.4825036   -2.0027618   -2.8863496 
          13           14           15           16 
  -3.2337016   -3.8002977   -4.8576761   -5.9051207 
          17           18           19           20 
  -5.9187582   -5.9217683   -6.1765439   -6.3271283 
          21           22           23           24 
  -6.7784098   -7.2277412   -7.8638524   -8.2671069 
          25           26           27           28 
  -9.1246085   -9.8455007  -10.6611908  -11.3470757 
          29           30           31           32 
 -11.6727330  -12.3574661  -12.7769834  -13.3302434 
          33           34           35           36 
 -13.8134740  -14.0456056  -14.4683711  -14.9559791 
          37           38           39           40 
 -15.3372275  -15.7869848  -16.3496170  -16.7031298 
          41           42           43           44 
 -16.9472525  -16.7339651  -16.1140547  -15.8743199 
          45           46           47           48 
 -15.6336293  -15.2588758  -14.9418878  -14.7540607 
          49           50           51           52 
 -14.9839880  -15.0225633  -15.3605792  -15.5914080 
          53           54           55           56 
 -15.9326802  -16.3625377  -16.4936085  -16.8153040 
          57           58           59           60 
 -17.3826232  -17.8897387  -18.4985161  -19.1532438 
          61           62           63           64 
 -20.1867562  -21.0855826  -21.0838268  -21.5774489 
          65           66           67           68 
 -21.7753032  -22.7447454  -23.4710011  -24.2283198 
          69           70           71           72 
 -25.0712603  -25.7654223  -26.6293839  -27.3639968 
          73           74           75           76 
 -27.8265818  -28.3084669  -29.1818497  -30.4594124 
          77           78           79           80 
 -31.3898963  -32.0336814  -32.8119584  -34.2134620 
          81           82           83           84 
 -35.0898841  -35.6697634  -36.0972303  -36.4321113 
          85           86           87           88 
 -36.3803980  -36.5744387  -36.4091039  -39.6752343 
          89           90           91           92 
 -39.4912561  -40.6025311  -41.9832389  -43.3281016 
          93           94           95           96 
 -44.5627094  -46.2791991  -48.0359862  -49.9201933 
          97           98           99          100 
 -51.5218360  -53.1609713  -54.6598598  -55.7743256 
         101          102          103          104 
 -58.0792304  -60.2231968  -61.7682115  -63.8857074 
         105          106          107          108 
 -66.0726268  -67.5324679  -68.9501363  -70.4989496 
         109          110          111          112 
 -72.2152986  -74.2354239  -75.5927438  -77.2970626 
         113          114          115          116 
 -79.3758410  -81.4587060  -83.7955091  -86.1577382 
         117          118          119          120 
 -88.6222883  -91.4790592  -94.4418155  -96.9358745 
         121          122          123          124 
 -99.6498714 -102.1712002 -104.9970286 -108.2846989 
         125          126          127          128 
-111.3547796 -114.3470338 -117.5291225 -120.7283582 
         129          130          131          132 
-123.8933122 -126.6649760 -129.6360223 -133.0407760 
         133          134          135          136 
-136.9977069 -140.4305996 -144.2678787 -148.7764465 
         137          138          139          140 
-152.3883193 -155.7674837 -159.6173076 -164.2781365 
         141          142          143          144 
-168.8851595 -173.8705188 -178.2872393 -182.1572014 
         145          146          147          148 
-186.4699594 -190.4386971 -193.9204020 -196.8335190 
         149          150          151          152 
-200.2893820 -203.3354432 -206.5366291 -209.5082894 
         153          154          155          156 
-213.2395172 -217.8887430 -222.1762365 -226.8475776 
         157          158          159          160 
-231.4301362 -236.0274221 -239.5512303 -243.3880029 
         161          162          163          164 
-246.6857436 -249.7451652 -252.8623879 -256.3059993 
         165          166          167          168 
-259.7314681 -263.4122993 -267.0072362 -270.3645312 
         169          170          171          172 
-273.0719955 -276.5638508 -280.6023476 -284.0389300 
         173          174          175          176 
-287.6618834 -291.1211362 -293.9673705 -296.2193027 
         177          178          179          180 
-299.3774888 -302.4479655 -304.9797349 -307.4233883 
         181 
-310.3060552 
######################################################################
#lower bound CI
cumsum(tapply(all_data$all_post_data$GPP_control_q025,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
   0.7552959    1.7446564    2.2628244    2.7705548 
           5            6            7            8 
   3.7480068    3.2785700    2.8842880    2.4262724 
           9           10           11           12 
   1.5423788    0.9599527    0.6019023   -0.2305185 
          13           14           15           16 
  -0.6293075   -1.3700649   -2.0957159   -2.8093003 
          17           18           19           20 
  -2.7158830   -2.3976906   -2.9384869   -3.2970654 
          21           22           23           24 
  -3.5851500   -3.9466381   -4.4554535   -4.8591940 
          25           26           27           28 
  -5.6096073   -6.1471120   -6.7702827   -7.3118635 
          29           30           31           32 
  -7.6534355   -8.0240002   -8.3763741   -8.7633500 
          33           34           35           36 
  -9.2256525   -9.3252866   -9.7021401  -10.1371846 
          37           38           39           40 
 -10.1072676  -10.3241880  -10.9407142  -11.2494025 
          41           42           43           44 
 -11.4751361  -11.4285729  -10.9360698  -10.7542563 
          45           46           47           48 
 -10.0122498   -9.4114805   -8.8106654   -8.5057373 
          49           50           51           52 
  -8.5248174   -7.9270534   -7.8541419   -8.0199462 
          53           54           55           56 
  -8.1750123   -8.1272080   -8.0093860   -8.1597468 
          57           58           59           60 
  -8.5842080   -8.9284500   -9.2706124   -9.1840048 
          61           62           63           64 
  -9.8639940  -10.1544821  -10.0554773  -10.3721035 
          65           66           67           68 
 -10.4759779  -11.2755023  -11.4289401  -12.2148713 
          69           70           71           72 
 -12.7480710  -12.8793962  -13.1244778  -13.4210881 
          73           74           75           76 
 -13.7641998  -14.1130843  -15.0050220  -16.0518122 
          77           78           79           80 
 -16.7021171  -17.3819996  -18.0120951  -19.2822596 
          81           82           83           84 
 -19.8204580  -20.3641112  -20.5706217  -20.7540997 
          85           86           87           88 
 -20.5164542  -20.0919067  -18.8188383  -21.0966942 
          89           90           91           92 
  -9.9708130    8.2189896   18.6198226   23.4792752 
          93           94           95           96 
  23.9502529   25.1249249   24.0063621   22.3819757 
          97           98           99          100 
  21.2211232   20.2593322   19.4747824   18.8577923 
         101          102          103          104 
  17.1980611   15.1525453   14.2273766   12.9774365 
         105          106          107          108 
  11.5257268   11.6724312   11.3825158   11.5313678 
         109          110          111          112 
  11.5043980   10.5708940   10.4174635    9.7042513 
         113          114          115          116 
   8.1933353    6.1560764    4.3093345    1.9867874 
         117          118          119          120 
  -0.3905314   -3.0229771   -5.7578479   -8.1344714 
         121          122          123          124 
 -10.6587631  -12.9154208  -15.2608278  -18.0313572 
         125          126          127          128 
 -20.6030747  -23.4303145  -26.0547979  -28.7258101 
         129          130          131          132 
 -31.3570211  -33.4516458  -35.4149442  -37.5707871 
         133          134          135          136 
 -40.7932884  -43.5770287  -46.6591876  -50.1265723 
         137          138          139          140 
 -53.2407449  -56.1351240  -59.6709258  -63.8507430 
         141          142          143          144 
 -68.0855546  -72.5609993  -76.9293264  -80.6330871 
         145          146          147          148 
 -84.7057669  -88.2853550  -91.1445418  -93.8402529 
         149          150          151          152 
 -97.1099411  -99.8958021 -102.5517260 -105.1221885 
         153          154          155          156 
-108.4495550 -113.1451537 -117.5404658 -122.1684149 
         157          158          159          160 
-126.6642588 -131.0712691 -134.2664023 -137.7050460 
         161          162          163          164 
-140.3911735 -142.7719024 -144.8088528 -147.6430227 
         165          166          167          168 
-150.3345603 -153.2500693 -156.1938732 -158.7388973 
         169          170          171          172 
-160.2580114 -162.8341869 -166.4669102 -169.5185043 
         173          174          175          176 
-172.7445022 -175.6540445 -177.9391648 -179.4436734 
         177          178          179          180 
-181.6157548 -183.4134348 -184.3947336 -185.2335976 
         181 
-186.8030329 
######################################################################


#upper bound CI
cumsum(tapply(all_data$all_post_data$GPP_control_q975 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
            1             2             3             4 
   0.46207475    0.84456215    0.85562499    0.87189482 
            5             6             7             8 
   1.01702245   -0.05270165   -0.66351211   -1.57696578 
            9            10            11            12 
  -3.20276042   -4.32354175   -4.91972145   -5.85115641 
           13            14            15            16 
  -6.11258949   -6.96440642   -7.96284868   -8.93546487 
           17            18            19            20 
  -8.96705998   -9.10436628   -9.61974709  -10.01223870 
           21            22            23            24 
 -10.42451146  -11.03988839  -11.57558131  -12.08003535 
           25            26            27            28 
 -12.88946662  -13.52924961  -14.25503691  -15.13273816 
           29            30            31            32 
 -15.89463917  -16.66183724  -17.22918555  -17.94834309 
           33            34            35            36 
 -18.57512582  -18.81061267  -19.41290517  -20.04909768 
           37            38            39            40 
 -20.28907174  -20.53286248  -21.18558168  -21.46742982 
           41            42            43            44 
 -21.72984791  -21.80839849  -21.55706673  -21.94282153 
           45            46            47            48 
 -21.96154954  -22.09469340  -22.07532758  -22.17810942 
           49            50            51            52 
 -22.74684565  -23.16743804  -24.36613834  -24.86738736 
           53            54            55            56 
 -25.52228058  -26.16535596  -26.33272349  -26.69934105 
           57            58            59            60 
 -27.49469530  -28.09278731  -29.44352645  -31.11728616 
           61            62            63            64 
 -32.92445076  -34.65587190  -35.53095913  -36.36079897 
           65            66            67            68 
 -36.84549344  -38.44589051  -39.51492661  -40.78238106 
           69            70            71            72 
 -41.66427733  -42.75258319  -43.84223551  -45.00449420 
           73            74            75            76 
 -45.64914637  -46.28067394  -47.24890422  -48.50991714 
           77            78            79            80 
 -49.41760287  -50.26864457  -51.03413431  -52.35882835 
           81            82            83            84 
 -53.27337987  -54.17517315  -54.68498093  -55.23184365 
           85            86            87            88 
 -55.55730785  -56.31104207  -56.92565060  -59.78081417 
           89            90            91            92 
 -64.83440936  -76.74947065  -84.57755297  -89.37488079 
           93            94            95            96 
 -91.65094410  -95.27229084  -97.65228546  -99.95301617 
           97            98            99           100 
-101.94912037 -104.03423930 -106.12953395 -108.08826174 
          101           102           103           104 
-111.31172059 -114.65148679 -116.82014110 -120.02152945 
          105           106           107           108 
-123.20520717 -125.74399516 -128.21837856 -130.72397243 
          109           110           111           112 
-133.44992941 -136.09148533 -137.94362098 -140.31071246 
          113           114           115           116 
-142.76031158 -145.07963467 -147.47246182 -150.13099093 
          117           118           119           120 
-152.85447145 -155.75011099 -159.51783056 -162.42360267 
          121           122           123           124 
-165.31567466 -168.02918847 -170.94431275 -174.66585629 
          125           126           127           128 
-178.50601730 -182.85698473 -187.17649192 -191.59952438 
          129           130           131           132 
-196.19892670 -200.29716053 -205.12579070 -210.23585246 
          133           134           135           136 
-215.93523134 -221.23285356 -226.66850161 -232.65128981 
          137           138           139           140 
-237.96984483 -242.35328990 -247.06841584 -252.47971895 
          141           142           143           144 
-258.02047391 -263.41119879 -268.09810521 -272.17572185 
          145           146           147           148 
-276.75947944 -281.11018730 -285.03409364 -288.44666240 
          149           150           151           152 
-292.07334618 -295.49279856 -298.89342384 -302.21032442 
          153           154           155           156 
-306.12288011 -310.82869563 -315.19770382 -319.99536521 
          157           158           159           160 
-325.00548290 -330.08038050 -334.45595311 -339.07583109 
          161           162           163           164 
-343.26952167 -347.57179001 -351.67511616 -356.04350172 
          165           166           167           168 
-360.47706565 -365.21190265 -369.93487945 -374.49107732 
          169           170           171           172 
-378.30571075 -383.01033682 -387.71104965 -392.02010838 
          173           174           175           176 
-396.66296168 -401.32542546 -405.44551621 -409.32375752 
          177           178           179           180 
-414.21651821 -418.99802238 -423.30344934 -427.63363294 
          181 
-431.71282960 

#Cumlative sum Reco Treatment side pre compost application with CI’s

cumsum(tapply(all_data$all_pre_data$RECO_predict_treatment_mean,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
  0.6820033   1.4324343   2.4127149   3.2144412   4.1289307 
          6           7           8           9          10 
  4.9988042   5.7974932   6.6083216   7.4140765   8.3041714 
         11          12          13          14          15 
  9.3795812  10.2976389  11.1179050  11.9906994  12.9574582 
         16          17          18          19          20 
 13.7938811  14.8406842  15.8018493  17.2149314  18.4971313 
         21          22          23          24          25 
 19.7924967  21.2185352  22.8314431  24.5421333  26.2518955 
         26          27          28          29          30 
 27.6461405  31.2017359  34.0142744  36.3615765  38.1963412 
         31          32          33          34          35 
 42.3079427  47.4164471  52.5630141  58.0704011  63.4610517 
         36          37          38          39          40 
 68.8309913  74.3441559  79.5216652  84.0239528  88.4647066 
         41          42          43          44          45 
 93.0221467  98.1294080 103.0654634 107.5956864 111.2652406 
         46          47          48          49          50 
114.6004225 117.5921010 120.9912549 124.8728635 128.3300547 
         51          52          53          54          55 
131.7357180 135.2180815 138.3538593 141.2567607 144.1957302 
         56          57          58          59          60 
147.3494339 150.2095920 152.9845380 156.0135182 159.5967355 
         61          62          63          64          65 
163.3070795 166.9472914 170.5280346 173.6955712 177.1559875 
         66          67          68          69          70 
180.2849066 183.1878838 185.7497223 188.7428683 191.6816858 
         71          72          73          74          75 
194.2830465 197.2199338 199.6511790 202.2934332 205.1893560 
         76          77          78          79          80 
207.5205973 209.8522183 211.8952470 214.1081019 216.3084878 
         81          82          83          84          85 
218.5542311 221.7367843 225.3496433 228.6291985 232.2641053 
         86          87          88          89          90 
236.5548068 241.1522210 245.0918732 249.0357998 252.5865081 
         91          92          93          94          95 
256.5690095 260.6265393 264.3271238 268.0422351 270.8870982 
         96          97          98          99         100 
273.0835547 275.5945315 278.5589542 281.7686284 284.9140205 
        101         102         103         104         105 
288.0231357 291.4711137 295.5109178 299.3427102 302.6287302 
        106         107         108         109         110 
306.0020996 309.5819021 313.5229734 317.3633138 321.2548479 
        111         112         113         114         115 
324.6138181 328.0224188 331.6509547 335.5369310 339.1457088 
        116         117         118         119         120 
342.7666762 346.8494244 350.6545082 354.6036892 358.6844513 
        121         122         123         124         125 
362.4165109 365.3526576 368.4608756 372.2829593 376.0072913 
        126         127         128         129         130 
379.3141209 382.3819816 384.7965814 386.7371843 388.9131163 
        131         132         133         134         135 
391.6241804 394.6430359 397.6340214 400.2593611 402.4357542 
        136         137         138         139         140 
404.5910983 406.6722740 408.3127429 409.9056807 411.6432985 
        141         142         143         144         145 
413.5014399 415.2642408 417.1473941 419.1002210 420.8135564 
        146         147         148         149         150 
422.2899566 423.8722125 425.6929525 427.9946128 430.6497963 
        151         152         153         154         155 
433.8461202 437.6049224 441.4921957 445.6572659 450.1189983 
        156         157         158         159         160 
454.6051055 459.5516784 463.8801444 468.4506181 473.4785488 
        161         162         163         164         165 
478.4336291 483.4095560 487.8930239 492.2709940 496.6538382 
        166         167         168         169         170 
500.8238329 505.0830309 509.2028432 512.7422071 516.0500015 
        171         172         173         174         175 
519.4046710 522.5750552 525.8063001 529.4559519 533.5254526 
        176         177         178         179         180 
537.4638424 541.4933868 545.2688001 548.8175588 552.3513852 
        181         182 
555.4754727 558.5767622 
cumsum(tapply(all_data$all_pre_data$RECO_predict_treatment_q025,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
            1             2             3             4 
 -0.007277171  -0.027420571   0.162427330   0.170927926 
            5             6             7             8 
  0.255886849   0.387592957   0.392003364   0.405303525 
            9            10            11            12 
  0.490908274   0.642313565   0.881173903   1.142142922 
           13            14            15            16 
  1.298393391   1.730681203   2.186837127   2.345360486 
           17            18            19            20 
  2.645065632   2.817070924   3.582834699   4.040777658 
           21            22            23            24 
  4.490610763   4.934296434   5.422109595   5.901317550 
           25            26            27            28 
  6.294411082   6.398757292   9.042087144  11.188918911 
           29            30            31            32 
 12.884535491  13.895874293  16.827140874  20.706803824 
           33            34            35            36 
 24.542525503  29.080266183  33.625165215  38.226182864 
           37            38            39            40 
 43.071792650  47.643049508  51.462957422  55.234947397 
           41            42            43            44 
 59.221684159  63.801168420  68.278106763  72.305858147 
           45            46            47            48 
 75.288082791  77.924501904  80.191533154  82.854125480 
           49            50            51            52 
 86.034286716  88.748439875  91.415009012  94.231918551 
           53            54            55            56 
 96.743024889  99.048720459 101.459927745 104.083488529 
           57            58            59            60 
106.343510984 108.451765343 110.891213793 113.831245593 
           61            62            63            64 
116.876107871 119.861811106 122.847228958 125.496819043 
           65            66            67            68 
128.410897977 131.035149404 133.410928189 135.279815023 
           69            70            71            72 
137.844266020 140.215002833 142.276480132 144.803302819 
           73            74            75            76 
146.777348744 148.947034117 151.155436850 152.951866298 
           77            78            79            80 
154.786521648 156.064031018 157.653929352 159.360181600 
           81            82            83            84 
161.108696903 163.807355608 166.906906337 169.526066420 
           85            86            87            88 
172.465565761 176.067914617 179.776294182 183.084833459 
           89            90            91            92 
186.451128051 189.356350548 192.636520541 195.774313235 
           93            94            95            96 
198.618007937 201.680619443 203.721215898 205.172635859 
           97            98            99           100 
206.922936124 209.182345416 211.675106712 214.077509903 
          101           102           103           104 
216.379777977 218.863542628 221.904861941 224.989774623 
          105           106           107           108 
227.637692523 230.405878090 233.341898393 236.665998444 
          109           110           111           112 
239.737378014 242.956895203 245.551466892 248.225137519 
          113           114           115           116 
251.016352428 254.234840739 257.157285937 259.932613293 
          117           118           119           120 
263.071060785 265.936466490 268.928453700 272.070096367 
          121           122           123           124 
275.177312308 277.190294502 279.042176336 281.641876281 
          125           126           127           128 
284.183746950 286.524175619 288.528204931 289.557550183 
          129           130           131           132 
289.657157050 289.868946809 290.464133518 291.588287504 
          133           134           135           136 
292.676141849 293.468145070 293.439363880 293.397182560 
          137           138           139           140 
293.423803423 292.378066105 290.982444699 289.623938203 
          141           142           143           144 
288.236031303 286.573633866 284.954966093 283.353317422 
          145           146           147           148 
281.399941115 279.149564278 277.117303163 275.470251343 
          149           150           151           152 
274.527896067 274.214774074 274.894550565 276.799862371 
          153           154           155           156 
279.343697907 282.433416114 285.986674233 289.630500337 
          157           158           159           160 
293.415551276 296.588874663 299.897249668 303.691207076 
          161           162           163           164 
307.474495030 311.283935492 314.649578964 317.881041506 
          165           166           167           168 
321.030051350 323.843620951 326.710225769 330.099840295 
          169           170           171           172 
333.149055567 335.882566712 338.658761277 341.380356821 
          173           174           175           176 
343.825578042 346.390444948 349.181522419 351.572647843 
          177           178           179           180 
354.148785764 356.878874942 359.226024406 361.376077202 
          181           182 
363.617417331 365.620890428 
cumsum(tapply(all_data$all_pre_data$RECO_predict_treatment_q975 ,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
         1          2          3          4          5 
  1.403028   2.941851   4.728503   6.291975   7.973494 
         6          7          8          9         10 
  9.516943  11.026318  12.566980  14.037729  15.614468 
        11         12         13         14         15 
 17.459448  19.006937  20.487570  21.802912  23.292152 
        16         17         18         19         20 
 24.789570  26.547374  28.260832  30.295325  32.343311 
        21         22         23         24         25 
 34.412567  36.746071  39.401644  42.299298  45.295195 
        26         27         28         29         30 
 48.083038  52.705609  56.217162  59.183508  61.783790 
        31         32         33         34         35 
 66.930727  73.172344  79.430968  85.945354  92.199962 
        36         37         38         39         40 
 98.298392 104.396342 110.124988 115.266649 120.331410 
        41         42         43         44         45 
125.455048 131.087319 136.504142 141.533540 145.847865 
        46         47         48         49         50 
149.867335 153.617983 157.764871 162.363635 166.495615 
        51         52         53         54         55 
170.544556 174.644337 178.346638 181.758966 185.162642 
        56         57         58         59         60 
188.831777 192.275776 195.691910 199.348433 203.640980 
        61         62         63         64         65 
208.051900 212.379266 216.542155 220.250412 224.250342 
        66         67         68         69         70 
227.914291 231.373602 234.577247 238.009409 241.450302 
        71         72         73         74         75 
244.564490 247.916495 250.792142 253.906654 257.376291 
        76         77         78         79         80 
260.219968 263.092248 265.816066 268.554746 271.255108 
        81         82         83         84         85 
274.033139 277.745886 281.925704 285.750153 290.045157 
        86         87         88         89         90 
295.041073 300.485595 305.028712 309.571099 313.795282 
        91         92         93         94         95 
318.491780 323.427218 327.983783 332.437213 336.271736 
        96         97         98         99        100 
339.313830 342.604257 346.265485 350.183133 354.005989 
       101        102        103        104        105 
357.810756 362.120582 367.055949 371.601123 375.551104 
       106        107        108        109        110 
379.567804 383.875839 388.555827 393.231985 397.888017 
       111        112        113        114        115 
402.080397 406.288840 410.773657 415.387220 419.697632 
       116        117        118        119        120 
424.156721 429.161152 433.862300 438.711922 443.673103 
       121        122        123        124        125 
448.024778 451.840010 456.193977 461.200064 466.039513 
       126        127        128        129        130 
470.269038 474.277988 477.957326 481.691870 485.712294 
       131        132        133        134        135 
490.346401 494.989241 499.571606 503.631667 507.458554 
       136        137        138        139        140 
511.369235 515.169854 518.990323 522.925684 526.976766 
       141        142        143        144        145 
531.201157 535.456094 539.850938 544.167088 548.339123 
       146        147        148        149        150 
552.420636 556.522086 560.671364 565.101629 569.734672 
       151        152        153        154        155 
574.613700 579.643321 584.514686 589.576367 594.810062 
       156        157        158        159        160 
600.007303 606.109535 611.593099 617.442986 623.779055 
       161        162        163        164        165 
630.034746 636.307542 642.014950 647.573087 653.164134 
       166        167        168        169        170 
658.587848 664.146927 669.000885 673.071155 677.020518 
       171        172        173        174        175 
681.048597 684.668123 688.751162 693.346118 698.549279 
       176        177        178        179        180 
703.812193 709.004135 713.678316 718.243549 722.950858 
       181        182 
726.912607 731.019135 

#Cumlative sum GPP treatment side pre compost application with CI’s

cumsum(tapply(all_data$all_pre_data$GPP_treatment_mean ,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
  -1.172758   -2.286897   -3.687987   -5.567412   -7.527279 
          6           7           8           9          10 
  -9.526040  -11.453581  -13.559381  -15.377789  -17.107642 
         11          12          13          14          15 
 -18.762423  -20.575497  -21.982607  -22.862714  -24.597608 
         16          17          18          19          20 
 -26.122108  -27.236319  -28.295306  -29.108033  -29.833185 
         21          22          23          24          25 
 -30.835714  -31.803099  -32.787574  -33.849187  -35.167536 
         26          27          28          29          30 
 -35.570224  -35.509151  -35.264476  -35.695115  -34.992359 
         31          32          33          34          35 
 -37.275356  -40.626953  -44.497475  -44.047965  -44.077237 
         36          37          38          39          40 
 -44.781270  -45.265093  -46.127913  -47.038300  -48.022949 
         41          42          43          44          45 
 -48.235892  -48.715257  -49.062693  -51.064184  -53.143424 
         46          47          48          49          50 
 -55.206254  -56.943634  -58.259911  -59.461747  -60.540665 
         51          52          53          54          55 
 -61.091872  -61.724460  -63.374495  -65.088118  -66.830979 
         56          57          58          59          60 
 -69.304722  -71.417867  -73.557460  -75.036464  -77.627399 
         61          62          63          64          65 
 -79.749257  -81.949424  -84.173105  -87.027826  -89.407219 
         66          67          68          69          70 
 -92.019049  -94.529769  -97.649420  -99.907659 -101.286398 
         71          72          73          74          75 
-103.448930 -105.949206 -108.150360 -110.705429 -113.323115 
         76          77          78          79          80 
-116.106458 -117.808180 -121.010089 -124.305642 -127.172116 
         81          82          83          84          85 
-129.613918 -132.129049 -135.798443 -138.909822 -142.996935 
         86          87          88          89          90 
-147.042594 -149.991122 -153.398711 -155.395653 -158.687658 
         91          92          93          94          95 
-161.814733 -164.060181 -166.501500 -169.554807 -172.861832 
         96          97          98          99         100 
-175.900001 -178.771866 -181.794318 -184.964065 -188.412015 
        101         102         103         104         105 
-192.028752 -195.050106 -198.025798 -201.584294 -206.237345 
        106         107         108         109         110 
-210.352702 -214.429666 -218.947629 -223.144819 -227.079132 
        111         112         113         114         115 
-231.393139 -235.477151 -239.209663 -243.281693 -247.765155 
        116         117         118         119         120 
-252.033221 -256.032661 -260.188466 -264.167918 -268.041618 
        121         122         123         124         125 
-272.490161 -276.358612 -280.174026 -284.006340 -287.868207 
        126         127         128         129         130 
-292.322295 -295.996131 -299.475394 -302.740481 -306.908127 
        131         132         133         134         135 
-310.391621 -314.567824 -319.038977 -324.062441 -328.127607 
        136         137         138         139         140 
-332.289930 -337.309774 -342.488423 -346.971228 -352.454697 
        141         142         143         144         145 
-358.290249 -363.425973 -368.798657 -374.672044 -380.490870 
        146         147         148         149         150 
-387.359695 -394.378184 -401.641735 -407.030604 -412.582669 
        151         152         153         154         155 
-419.094246 -425.721196 -432.566856 -438.832619 -444.852627 
        156         157         158         159         160 
-449.776699 -453.853799 -458.414005 -463.966665 -469.172016 
        161         162         163         164         165 
-473.747432 -478.881896 -484.312320 -489.786153 -496.492072 
        166         167         168         169         170 
-503.142873 -509.322207 -514.810284 -521.091021 -526.330802 
        171         172         173         174         175 
-531.387469 -535.695459 -539.375925 -543.461388 -547.496781 
        176         177         178         179         180 
-551.618288 -555.440094 -559.193413 -562.940795 -566.405582 
        181         182 
-569.294197 -572.407919 
cumsum(tapply(all_data$all_pre_data$GPP_treatment_q025,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
          1           2           3           4           5 
  -2.060209   -3.841801   -5.478946   -7.504117   -9.683201 
          6           7           8           9          10 
 -11.845944  -14.144844  -16.567171  -18.742142  -20.802938 
         11          12          13          14          15 
 -22.465036  -24.531063  -26.122263  -27.449358  -29.475675 
         16          17          18          19          20 
 -31.230373  -32.499923  -33.795179  -35.113951  -36.336810 
         21          22          23          24          25 
 -37.971325  -39.516520  -40.975698  -42.368248  -43.981641 
         26          27          28          29          30 
 -44.470207  -44.906294  -44.980240  -45.667558  -45.368595 
         31          32          33          34          35 
 -49.749169  -55.422333  -62.242474  -62.116187  -62.374628 
         36          37          38          39          40 
 -63.234042  -63.874714  -64.963093  -66.621169  -67.824287 
         41          42          43          44          45 
 -68.369679  -68.924922  -69.574564  -71.790161  -74.087647 
         46          47          48          49          50 
 -76.568076  -78.936941  -80.085193  -81.632043  -82.936230 
         51          52          53          54          55 
 -83.956944  -85.120155  -87.016400  -88.821252  -90.931533 
         56          57          58          59          60 
 -93.601421  -96.133513  -98.555035 -100.196592 -103.393526 
         61          62          63          64          65 
-106.168402 -108.690686 -111.360771 -114.580593 -117.152089 
         66          67          68          69          70 
-120.176675 -123.032858 -126.486014 -129.031595 -131.046014 
         71          72          73          74          75 
-133.650184 -136.457796 -138.919832 -142.108633 -144.930257 
         76          77          78          79          80 
-148.014410 -150.628697 -154.331950 -158.107620 -161.521130 
         81          82          83          84          85 
-164.525142 -167.522600 -171.675052 -175.520638 -180.027391 
         86          87          88          89          90 
-184.571231 -188.211793 -191.538864 -194.777381 -198.565482 
         91          92          93          94          95 
-202.144371 -205.351466 -208.541533 -212.076539 -215.941355 
         96          97          98          99         100 
-219.445429 -222.657385 -226.096976 -229.587652 -233.407976 
        101         102         103         104         105 
-237.467993 -240.956936 -244.431818 -248.467702 -253.585112 
        106         107         108         109         110 
-258.255329 -263.046197 -267.660170 -272.433865 -277.051091 
        111         112         113         114         115 
-281.870397 -286.307560 -290.481222 -295.112462 -300.040743 
        116         117         118         119         120 
-304.736183 -309.147885 -313.462544 -317.683719 -321.674579 
        121         122         123         124         125 
-326.518955 -330.807491 -335.062988 -339.193071 -343.683951 
        126         127         128         129         130 
-348.905490 -353.490929 -357.841932 -362.069803 -367.385285 
        131         132         133         134         135 
-371.876972 -377.153158 -382.857557 -389.316247 -394.668739 
        136         137         138         139         140 
-400.885750 -408.296775 -415.049384 -420.835932 -427.646177 
        141         142         143         144         145 
-434.711077 -441.000340 -447.592925 -454.871766 -462.312759 
        146         147         148         149         150 
-471.302216 -480.455388 -489.725670 -496.710370 -503.737124 
        151         152         153         154         155 
-511.425480 -519.095406 -526.698878 -533.615749 -540.100375 
        156         157         158         159         160 
-545.536411 -550.528780 -556.716745 -563.722744 -570.368001 
        161         162         163         164         165 
-576.795411 -584.242405 -592.449061 -600.488629 -609.268302 
        166         167         168         169         170 
-617.815080 -625.271369 -631.808167 -637.971330 -643.321441 
        171         172         173         174         175 
-648.689066 -652.804254 -657.307645 -661.130969 -664.975312 
        176         177         178         179         180 
-670.225130 -674.842913 -678.715247 -682.411286 -686.361721 
        181         182 
-689.822315 -693.873419 
cumsum(tapply(all_data$all_pre_data$GPP_treatment_q975 ,
            round(all_data$all_pre_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
  -0.3964369   -1.1575437   -2.0984160   -3.4235323 
           5            6            7            8 
  -4.9167801   -6.5118630   -8.1847238   -9.8432361 
           9           10           11           12 
 -11.5118739  -13.0817124  -14.2998988  -15.7959447 
          13           14           15           16 
 -16.9254748  -17.7263608  -19.2278404  -20.3762990 
          17           18           19           20 
 -21.2133884  -22.0882560  -22.4616833  -22.7153401 
          21           22           23           24 
 -23.1672601  -23.6308873  -24.1770343  -24.9185842 
          25           26           27           28 
 -25.9723140  -26.2810171  -26.1160062  -25.5112829 
          29           30           31           32 
 -25.5970223  -24.4316482  -24.9096607  -25.9215857 
          33           34           35           36 
 -27.2140344  -26.3738717  -26.0632958  -26.2309487 
          37           38           39           40 
 -26.3697739  -26.8362906  -27.9267805  -28.6353885 
          41           42           43           44 
 -28.6174640  -28.5883136  -28.7574689  -30.4199084 
          45           46           47           48 
 -32.2314331  -33.9456345  -35.4571251  -36.4849428 
          49           50           51           52 
 -37.4105159  -38.1099540  -38.3909093  -38.8575113 
          53           54           55           56 
 -40.2677175  -41.6611789  -43.0951509  -44.9310574 
          57           58           59           60 
 -46.8088987  -48.6445761  -49.6702406  -51.8199852 
          61           62           63           64 
 -53.7432302  -55.6843015  -57.6973189  -60.0828402 
          65           66           67           68 
 -61.8474991  -64.1497275  -66.2873891  -69.0979532 
          69           70           71           72 
 -71.0117441  -71.6645680  -73.5191003  -75.5280841 
          73           74           75           76 
 -77.5285107  -80.1954018  -82.0133883  -84.5398746 
          77           78           79           80 
 -85.2912426  -88.0696849  -90.8617749  -93.2766626 
          81           82           83           84 
 -95.3134375  -97.4736800 -100.5967810 -103.2335164 
          85           86           87           88 
-106.3485524 -109.5810098 -112.0020503 -114.5797183 
          89           90           91           92 
-116.6511114 -119.0722525 -121.1408605 -122.6876580 
          93           94           95           96 
-124.3140354 -126.5133504 -129.1932442 -131.6770793 
          97           98           99          100 
-134.0462188 -136.7093722 -139.4450236 -142.3864578 
         101          102          103          104 
-145.4505403 -147.9330332 -150.3644731 -153.5104877 
         105          106          107          108 
-157.5449962 -161.1886646 -164.9097778 -168.6199882 
         109          110          111          112 
-172.3022783 -175.8801096 -179.8914557 -183.5807859 
         113          114          115          116 
-186.9333999 -190.6163616 -194.5528730 -198.4338687 
         117          118          119          120 
-202.0518265 -205.8784542 -209.6661488 -213.2570183 
         121          122          123          124 
-217.2750255 -220.6553124 -223.8279817 -227.2696231 
         125          126          127          128 
-230.6110288 -233.7351195 -236.1278288 -238.3177762 
         129          130          131          132 
-240.3431526 -243.1374660 -245.3303978 -248.0749253 
         133          134          135          136 
-251.1522245 -254.6538091 -257.3041191 -259.5622612 
         137          138          139          140 
-261.7405832 -265.7161314 -269.0463956 -273.3115212 
         141          142          143          144 
-277.9706605 -282.0107511 -286.2331742 -290.6775085 
         145          146          147          148 
-294.9776672 -300.0672792 -305.2443120 -310.7181448 
         149          150          151          152 
-314.5848644 -318.7532852 -323.9902136 -329.5046247 
         153          154          155          156 
-335.5451909 -341.3053459 -346.6278860 -350.6188518 
         157          158          159          160 
-353.7218028 -356.8642941 -361.0727806 -364.9466160 
         161          162          163          164 
-367.8296134 -370.9211969 -373.6402428 -376.7418826 
         165          166          167          168 
-381.6613751 -386.8557146 -391.9994977 -397.1901618 
         169          170          171          172 
-402.7723193 -407.7936484 -412.8521353 -416.4604372 
         173          174          175          176 
-420.7489657 -424.3914921 -428.0996956 -431.5725765 
         177          178          179          180 
-434.8532009 -438.6284349 -442.2702533 -445.2264307 
         181          182 
-447.3385010 -449.1950554 

#Cumlative sum Reco Treatment side post compost application with CI’s


#Reco Cumsum
cumsum(tapply(all_data$all_post_data$RECO_predict_treatment_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
         1          2          3          4          5 
  1.499663   2.826351   3.845111   4.687869   5.479498 
         6          7          8          9         10 
  6.108483   6.752767   7.401349   8.101795   9.217710 
        11         12         13         14         15 
 10.871573  12.305658  14.103919  15.823695  17.487732 
        16         17         18         19         20 
 19.718671  22.632598  26.067018  28.964851  31.460394 
        21         22         23         24         25 
 33.470141  34.854128  36.434829  37.641961  38.864687 
        26         27         28         29         30 
 39.722151  40.534277  40.958386  41.523885  42.443884 
        31         32         33         34         35 
 43.718507  44.864157  45.988180  47.048214  48.001388 
        36         37         38         39         40 
 48.859335  49.805350  50.810266  51.721616  53.086570 
        41         42         43         44         45 
 54.991124  57.801948  60.956621  64.163387  67.330953 
        46         47         48         49         50 
 70.404599  73.742369  76.485757  78.710268  80.852365 
        51         52         53         54         55 
 82.568768  84.649161  86.642957  88.508072  90.502796 
        56         57         58         59         60 
 92.844607  94.860365  96.831831  98.762958 100.926174 
        61         62         63         64         65 
103.094530 105.343467 107.664170 109.792966 112.424864 
        66         67         68         69         70 
115.009954 117.573011 120.187748 122.640971 125.032291 
        71         72         73         74         75 
127.163827 129.205089 131.165721 133.245873 135.578021 
        76         77         78         79         80 
137.629478 139.751228 141.972396 144.153397 146.245853 
        81         82         83         84         85 
148.124345 149.693694 151.402988 153.348736 155.382382 
        86         87         88         89         90 
157.679989 160.277464 162.005331 164.340508 166.524295 
        91         92         93         94         95 
169.318821 171.993338 174.580130 177.362540 179.683123 
        96         97         98         99        100 
181.979620 184.330330 186.775889 189.058834 191.327781 
       101        102        103        104        105 
194.006017 196.922402 199.989372 203.118981 206.558811 
       106        107        108        109        110 
209.542209 213.043972 216.119111 218.923380 221.841895 
       111        112        113        114        115 
225.213938 228.444870 231.821784 235.647553 239.252461 
       116        117        118        119        120 
241.898048 244.033413 245.942491 247.684757 249.842190 
       121        122        123        124        125 
251.911904 254.078196 256.116809 258.074410 260.083955 
       126        127        128        129        130 
262.272955 264.393665 266.655586 268.758181 270.989149 
       131        132        133        134        135 
273.274859 275.693367 278.323540 281.498632 284.863409 
       136        137        138        139        140 
288.148743 291.364946 295.195097 299.040759 302.539642 
       141        142        143        144        145 
305.593400 308.663198 311.506288 314.341186 317.278114 
       146        147        148        149        150 
320.177636 323.191391 326.430865 329.710231 333.134980 
       151        152        153        154        155 
336.661753 340.001255 342.903576 345.423923 347.734996 
       156        157        158        159        160 
349.924628 352.062817 354.179674 356.138110 357.949324 
       161        162        163        164        165 
359.763253 361.900246 364.339386 366.873801 369.398134 
       166        167        168        169        170 
371.593218 373.263541 374.825916 376.451514 378.023291 
       171        172        173        174        175 
379.586577 381.095287 382.477292 383.662044 384.673094 
       176        177        178        179        180 
385.655356 386.542018 387.435439 388.535592 389.932487 
       181 
391.635500 
#lower bound CI
cumsum(tapply(all_data$all_post_data$RECO_predict_treatment_q025,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
            1             2             3             4 
 -0.026378513  -0.038808584   0.008638873   0.016775002 
            5             6             7             8 
 -0.081283452   0.064567926   0.307353647   0.453653837 
            9            10            11            12 
  0.497551556   0.874275883   1.958686500   2.715945215 
           13            14            15            16 
  3.874645134   4.960170390   5.922627488   7.469565520 
           17            18            19            20 
  9.688541122  12.444921806  14.591832688  16.366256420 
           21            22            23            24 
 17.721436866  18.512090442  19.585041639  20.225199622 
           25            26            27            28 
 20.967715536  21.276171076  21.494266601  21.211331716 
           29            30            31            32 
 21.141521856  21.443783658  22.067417718  22.582649474 
           33            34            35            36 
 23.112510392  23.521040325  23.847832950  24.065523913 
           37            38            39            40 
 24.184362081  24.374452117  24.655265352  25.404982543 
           41            42            43            44 
 26.887971146  29.232860733  31.820470930  34.368224532 
           45            46            47            48 
 36.784178852  38.932614023  41.389991426  43.330327565 
           49            50            51            52 
 44.827131455  46.192707101  47.020820533  48.486871255 
           53            54            55            56 
 49.903130297  51.150786612  52.639159270  54.486878101 
           57            58            59            60 
 55.959365076  57.316641894  58.447189600  59.800606354 
           61            62            63            64 
 61.393592583  62.992554207  64.734559316  66.185533551 
           65            66            67            68 
 68.147712886  70.121512092  72.004707784  73.963148512 
           69            70            71            72 
 75.757873273  77.402790692  78.794225429  80.030835224 
           73            74            75            76 
 81.209394699  82.466400594  83.988131294  85.273328272 
           77            78            79            80 
 86.588328503  87.893704807  89.096922113  90.584738782 
           81            82            83            84 
 91.841658808  92.831045614  94.070767374  95.544126305 
           85            86            87            88 
 97.057917731  98.650197859  99.955192896  99.595979802 
           89            90            91            92 
 98.949536724  96.521159249  98.414521677 100.361056668 
           93            94            95            96 
102.247747193 104.413539689 106.179256620 107.811559500 
           97            98            99           100 
109.396142736 111.010148568 112.379334643 113.693015964 
          101           102           103           104 
115.699729725 117.999584060 120.565533150 123.147285735 
          105           106           107           108 
126.076538958 128.408754721 131.305098405 133.614994952 
          109           110           111           112 
135.451085121 137.433004922 140.148920135 142.745606247 
          113           114           115           116 
145.249269660 147.994970496 150.387463129 152.102120559 
          117           118           119           120 
153.393078811 154.580610796 155.639167556 157.097568047 
          121           122           123           124 
158.449648908 159.900875750 161.297655989 162.609706075 
          125           126           127           128 
163.906295189 165.544049668 167.091042153 168.942178861 
          129           130           131           132 
170.462334913 171.973295780 173.130220219 174.581793503 
          133           134           135           136 
176.644012081 179.319009299 182.049591271 184.518017335 
          137           138           139           140 
187.036592826 190.192704934 193.345931767 196.146620194 
          141           142           143           144 
198.468473157 200.990756684 203.165635182 205.247655813 
          145           146           147           148 
207.528333811 209.581133494 211.563575834 213.743869644 
          149           150           151           152 
216.070302490 218.510737872 221.029399439 223.381062927 
          153           154           155           156 
225.523912961 227.551907904 229.322816543 231.019451211 
          157           158           159           160 
232.501815862 234.056391658 235.337673992 236.559014821 
          161           162           163           164 
237.580769736 238.914559888 240.602215473 242.639923413 
          165           166           167           168 
244.623849719 246.253654395 247.247642136 248.076558722 
          169           170           171           172 
248.824308565 249.795379719 250.947248564 251.946307438 
          173           174           175           176 
252.944101888 253.650983436 254.288475518 255.002183219 
          177           178           179           180 
255.422098092 255.709571538 256.037843235 256.568936928 
          181 
257.477449545 
#upper bound CI
cumsum(tapply(all_data$all_post_data$RECO_predict_treatment_q975 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
         1          2          3          4          5 
  2.897563   5.459978   7.400499   9.039906  10.668182 
         6          7          8          9         10 
 11.820499  12.881448  13.966152  15.288765  17.103327 
        11         12         13         14         15 
 19.261921  21.320272  23.707761  26.026667  28.374220 
        16         17         18         19         20 
 31.256786  34.898494  39.028750  42.661308  45.869725 
        21         22         23         24         25 
 48.533890  50.513975  52.611936  54.354350  56.070321 
        26         27         28         29         30 
 57.504271  58.910105  59.988992  61.171496  62.699733 
        31         32         33         34         35 
 64.609548  66.369579  68.097916  69.843021  71.467080 
        36         37         38         39         40 
 73.005845  74.785647  76.604813  78.190979  80.187305 
        41         42         43         44         45 
 82.525014  85.788500  89.496540  93.314283  97.178447 
        46         47         48         49         50 
101.037578 105.196319 108.722244 111.714276 114.812884 
        51         52         53         54         55 
117.715899 120.431028 123.041079 125.665150 128.226814 
        56         57         58         59         60 
131.061717 133.585092 136.127955 138.817372 142.001400 
        61         62         63         64         65 
144.749104 147.681934 150.591402 153.453917 156.783314 
        66         67         68         69         70 
160.005896 163.325374 166.623099 169.744995 172.924932 
        71         72         73         74         75 
175.835648 178.721145 181.415090 184.264027 187.367758 
        76         77         78         79         80 
190.166748 193.109887 196.237586 199.379442 202.041881 
        81         82         83         84         85 
204.529512 206.682703 208.854622 211.275786 213.815587 
        86         87         88         89         90 
216.925547 221.362424 225.772484 230.614194 236.280289 
        91         92         93         94         95 
240.099634 243.540659 246.811102 250.180577 253.013601 
        96         97         98         99        100 
255.953236 259.075021 262.345636 265.541393 268.741887 
       101        102        103        104        105 
272.023324 275.519100 279.075996 282.749032 286.729383 
       106        107        108        109        110 
290.388004 294.563050 298.451401 302.223474 306.036464 
       111        112        113        114        115 
310.061674 313.950912 318.361004 323.447854 328.467737 
       116        117        118        119        120 
332.034708 335.099046 337.846868 340.290248 343.130578 
       121        122        123        124        125 
345.920848 348.777554 351.419880 354.007454 356.676903 
       126        127        128        129        130 
359.406352 362.103145 364.791569 367.455262 370.524010 
       131        132        133        134        135 
373.993470 377.301407 380.493122 384.212895 388.362889 
       136        137        138        139        140 
392.515349 396.444313 400.984480 405.559945 409.765223 
       141        142        143        144        145 
413.537390 417.151888 420.673923 424.266381 427.873857 
       146        147        148        149        150 
431.654722 435.766169 440.131305 444.440429 448.928719 
       151        152        153        154        155 
453.528588 457.887406 461.587740 464.605012 467.436742 
       156        157        158        159        160 
470.117308 472.930503 475.628003 478.328004 480.739631 
       161        162        163        164        165 
483.361279 486.296251 489.516330 492.557386 495.649136 
       166        167        168        169        170 
498.407919 500.730156 502.968443 505.389336 507.520158 
       171        172        173        174        175 
509.493535 511.518269 513.286857 514.952852 516.345756 
       176        177        178        179        180 
517.627558 519.029823 520.569331 522.453764 524.679099 
       181 
527.176959 

#Cumulative sum GPP treament side post compost application with CI’s


#GPP Cumsum
cumsum(tapply(all_data$all_post_data$GPP_treatment_mean,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
  -0.7700035   -1.3419130   -1.9694535   -2.4072138 
           5            6            7            8 
  -2.4078975   -3.2921129   -4.4684425   -5.6891135 
           9           10           11           12 
  -7.5057843   -8.9501545  -10.0425270  -11.4432422 
          13           14           15           16 
 -12.0100421  -13.1301796  -14.3482762  -15.5807345 
          17           18           19           20 
 -16.4394424  -15.9677393  -17.5342661  -19.1912917 
          21           22           23           24 
 -20.5040607  -21.4567661  -22.5659322  -23.6993379 
          25           26           27           28 
 -24.9368876  -26.3394104  -27.9992506  -29.4679940 
          29           30           31           32 
 -30.9120490  -32.2438415  -33.6437545  -35.0129053 
          33           34           35           36 
 -36.4010249  -37.4892691  -38.6466842  -39.7328361 
          37           38           39           40 
 -40.5474272  -41.4212815  -42.3333279  -43.3393102 
          41           42           43           44 
 -44.0974321  -44.8520530  -45.0975702  -46.5071452 
          45           46           47           48 
 -47.4207864  -48.4001037  -48.8133911  -50.0453248 
          49           50           51           52 
 -51.4588007  -52.8775544  -54.0299386  -55.6216365 
          53           54           55           56 
 -57.4761918  -58.9699481  -59.8107658  -60.5816555 
          57           58           59           60 
 -61.7450187  -62.4018161  -63.5739972  -64.6892335 
          61           62           63           64 
 -65.6885759  -66.5842605  -66.7355751  -67.1620454 
          65           66           67           68 
 -67.2101776  -68.8136404  -70.1317139  -71.9060253 
          69           70           71           72 
 -73.2971337  -75.6371896  -77.6528515  -79.9351937 
          73           74           75           76 
 -81.3179424  -82.6325103  -84.6189665  -86.7379256 
          77           78           79           80 
 -88.5557244  -90.2892093  -92.0484714  -94.2176276 
          81           82           83           84 
 -95.8655955  -97.4103777  -98.2052392  -99.5558951 
          85           86           87           88 
-100.4090866 -102.3872300 -103.6417659 -104.5540600 
          89           90           91           92 
-105.4777659 -107.1146959 -109.3465543 -110.9935077 
          93           94           95           96 
-112.2181777 -113.8024786 -115.1999076 -117.3294000 
          97           98           99          100 
-119.0329261 -120.9798588 -123.1507313 -125.5014474 
         101          102          103          104 
-127.5107655 -130.5281675 -132.1048127 -135.2275343 
         105          106          107          108 
-138.0060132 -141.0021617 -143.7663732 -147.4814709 
         109          110          111          112 
-151.1992915 -154.6345999 -157.2552513 -161.4009831 
         113          114          115          116 
-166.1411713 -170.0358284 -172.3281581 -174.4987334 
         117          118          119          120 
-177.5280977 -180.4938936 -183.8438818 -186.9958320 
         121          122          123          124 
-189.9409206 -192.6515801 -195.5637503 -198.4913809 
         125          126          127          128 
-201.4100275 -204.9433397 -208.3147977 -211.6320639 
         129          130          131          132 
-215.0820456 -219.1243348 -222.5085404 -226.4937821 
         133          134          135          136 
-231.8464686 -237.1679789 -242.7113589 -248.0016578 
         137          138          139          140 
-253.0874697 -257.0860896 -262.1403137 -267.6059798 
         141          142          143          144 
-272.7311034 -277.6397984 -282.0425273 -286.0426266 
         145          146          147          148 
-290.4171600 -293.9588313 -297.2177263 -300.5763476 
         149          150          151          152 
-304.1812017 -307.7126076 -310.7400736 -313.5113244 
         153          154          155          156 
-316.3611262 -319.8029005 -322.9775120 -326.2429071 
         157          158          159          160 
-329.2948192 -332.2568219 -334.9140274 -337.9865853 
         161          162          163          164 
-340.5326856 -343.3277957 -346.3134132 -349.5629129 
         165          166          167          168 
-352.8374116 -355.8346490 -358.2919360 -360.5667714 
         169          170          171          172 
-362.5858366 -364.6012448 -367.5742751 -369.9264703 
         173          174          175          176 
-372.5330901 -374.9517528 -376.8840409 -378.3271003 
         177          178          179          180 
-380.4300326 -382.3501178 -384.0721996 -385.7921479 
         181 
-387.6552809 
########GPP comparison using Reco_predict######

#making the comparison GPP variable
all_data$all_post_data$GPP_treatment_with_pred_Reco <- (all_data$all_post_data$NEE_filled_treatment_mean - all_data$all_post_data$RECO_predict_treatment_mean)

all_data$all_post_data$GPP_treatment_with_pred_Reco [(all_data$all_post_data$Rg <= 10 )]<-0


cumsum(tapply(all_data$all_post_data$GPP_treatment_with_pred_Reco,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
  -0.7700035   -1.3419130   -1.9694535   -2.4072138 
           5            6            7            8 
  -2.4078975   -3.2921129   -4.4684425   -5.6891135 
           9           10           11           12 
  -7.5057843   -8.9501545  -10.0425270  -11.4432422 
          13           14           15           16 
 -12.0100421  -13.1301796  -14.3482762  -15.5807345 
          17           18           19           20 
 -16.4394424  -15.9677393  -17.5342661  -19.1912917 
          21           22           23           24 
 -20.5040607  -21.4567661  -22.5659322  -23.6993379 
          25           26           27           28 
 -24.9368876  -26.3394104  -27.9992506  -29.4679940 
          29           30           31           32 
 -30.9120490  -32.2438415  -33.6437545  -35.0129053 
          33           34           35           36 
 -36.4010249  -37.4892691  -38.6466842  -39.7328361 
          37           38           39           40 
 -40.5474272  -41.4212815  -42.3333279  -43.3393102 
          41           42           43           44 
 -44.0974321  -44.8520530  -45.0975702  -46.5071452 
          45           46           47           48 
 -47.4207864  -48.4001037  -48.8133911  -50.0453248 
          49           50           51           52 
 -51.4588007  -52.8775544  -54.0299386  -55.6216365 
          53           54           55           56 
 -57.4761918  -58.9699481  -59.8107658  -60.5816555 
          57           58           59           60 
 -61.7450187  -62.4018161  -63.5739972  -64.6892335 
          61           62           63           64 
 -65.6885759  -66.5842605  -66.7355751  -67.1620454 
          65           66           67           68 
 -67.2101776  -68.8136404  -70.1317139  -71.9060253 
          69           70           71           72 
 -73.2971337  -75.6371896  -77.6528515  -79.9351937 
          73           74           75           76 
 -81.3179424  -82.6325103  -84.6189665  -86.7379256 
          77           78           79           80 
 -88.5557244  -90.2892093  -92.0484714  -94.2176276 
          81           82           83           84 
 -95.8655955  -97.4103777  -98.2052392  -99.5558951 
          85           86           87           88 
-100.4090866 -102.3872300 -103.6417659 -104.5540600 
          89           90           91           92 
-105.4777659 -107.1146959 -109.3465543 -110.9935077 
          93           94           95           96 
-112.2181777 -113.8024786 -115.1999076 -117.3294000 
          97           98           99          100 
-119.0329261 -120.9798588 -123.1507313 -125.5014474 
         101          102          103          104 
-127.5107655 -130.5281675 -132.1048127 -135.2275343 
         105          106          107          108 
-138.0060132 -141.0021617 -143.7663732 -147.4814709 
         109          110          111          112 
-151.1992915 -154.6345999 -157.2552513 -161.4009831 
         113          114          115          116 
-166.1411713 -170.0358284 -172.3281581 -174.4987334 
         117          118          119          120 
-177.5280977 -180.4938936 -183.8438818 -186.9958320 
         121          122          123          124 
-189.9409206 -192.6515801 -195.5637503 -198.4913809 
         125          126          127          128 
-201.4100275 -204.9433397 -208.3147977 -211.6320639 
         129          130          131          132 
-215.0820456 -219.1243348 -222.5085404 -226.4937821 
         133          134          135          136 
-231.8464686 -237.1679789 -242.7113589 -248.0016578 
         137          138          139          140 
-253.0874697 -257.0860896 -262.1403137 -267.6059798 
         141          142          143          144 
-272.7311034 -277.6397984 -282.0425273 -286.0426266 
         145          146          147          148 
-290.4171600 -293.9588313 -297.2177263 -300.5763476 
         149          150          151          152 
-304.1812017 -307.7126076 -310.7400736 -313.5113244 
         153          154          155          156 
-316.3611262 -319.8029005 -322.9775120 -326.2429071 
         157          158          159          160 
-329.2948192 -332.2568219 -334.9140274 -337.9865853 
         161          162          163          164 
-340.5326856 -343.3277957 -346.3134132 -349.5629129 
         165          166          167          168 
-352.8374116 -355.8346490 -358.2919360 -360.5667714 
         169          170          171          172 
-362.5858366 -364.6012448 -367.5742751 -369.9264703 
         173          174          175          176 
-372.5330901 -374.9517528 -376.8840409 -378.3271003 
         177          178          179          180 
-380.4300326 -382.3501178 -384.0721996 -385.7921479 
         181 
-387.6552809 
#essentially the same. -387.73 with this v.s -387.66

#lower bound CI
cumsum(tapply(all_data$all_post_data$GPP_treatment_q025,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
  -0.4488801   -0.7189981   -1.2210473   -1.6191176 
           5            6            7            8 
  -1.5750823   -2.5323049   -3.7998070   -5.3610026 
           9           10           11           12 
  -7.4293656   -9.0054254  -10.2329938  -11.7304555 
          13           14           15           16 
 -12.3938476  -13.6735912  -14.8851495  -16.1407193 
          17           18           19           20 
 -16.6850543  -17.6141141  -19.2772019  -21.0467761 
          21           22           23           24 
 -22.5504041  -23.8153472  -24.9967423  -26.1095425 
          25           26           27           28 
 -27.5546324  -29.1961757  -31.1117764  -32.8745977 
          29           30           31           32 
 -34.5448340  -36.2189352  -37.8506508  -39.4615683 
          33           34           35           36 
 -41.0595111  -42.4193555  -43.7747757  -45.0432533 
          37           38           39           40 
 -45.9049089  -46.8329178  -47.9909060  -49.0558647 
          41           42           43           44 
 -49.9731925  -51.0688520  -51.8643157  -53.7755230 
          45           46           47           48 
 -55.1077593  -56.4553226  -57.4560312  -59.0735411 
          49           50           51           52 
 -60.9186274  -62.6049132  -64.2428761  -66.2893017 
          53           54           55           56 
 -68.6115726  -70.3983422  -71.2451264  -72.3429964 
          57           58           59           60 
 -73.7119802  -74.5922039  -75.9837332  -77.3092926 
          61           62           63           64 
 -78.4136108  -79.4163119  -79.8070338  -80.4509862 
          65           66           67           68 
 -80.6400851  -82.4092184  -83.8928115  -85.8805984 
          69           70           71           72 
 -87.5494333  -90.1137937  -92.3449411  -94.7835311 
          73           74           75           76 
 -96.3401397  -97.9127146 -100.0821631 -102.4587943 
          77           78           79           80 
-104.3964369 -106.2319013 -108.2639533 -110.9076835 
          81           82           83           84 
-112.9210177 -114.8144606 -116.1182439 -117.5908328 
          85           86           87           88 
-118.2623091 -120.2212955 -121.4173486 -122.1023745 
          89           90           91           92 
-124.3970041 -126.2060779 -129.8940893 -131.8487188 
          93           94           95           96 
-133.2993797 -134.6851549 -136.4250393 -138.7653769 
          97           98           99          100 
-140.6185613 -142.7578630 -145.1737661 -147.9908681 
         101          102          103          104 
-149.9547860 -152.8422663 -155.0520981 -158.4823094 
         105          106          107          108 
-161.7028454 -164.8971500 -167.8659216 -171.7063434 
         109          110          111          112 
-175.6495945 -179.5108370 -182.9547051 -187.9661067 
         113          114          115          116 
-193.8319521 -198.9616599 -201.6350395 -204.3438350 
         117          118          119          120 
-207.9176375 -211.1507140 -215.2380163 -218.6801288 
         121          122          123          124 
-221.8621088 -224.6929477 -227.2231825 -230.3107054 
         125          126          127          128 
-233.2961903 -236.8840042 -240.5034943 -244.2888099 
         129          130          131          132 
-247.9140460 -251.9373797 -256.0073651 -260.4327199 
         133          134          135          136 
-266.0526026 -271.4905104 -277.4029353 -283.2604732 
         137          138          139          140 
-288.6895273 -293.2654954 -298.6399536 -304.4509655 
         141          142          143          144 
-310.1260556 -315.5193516 -320.3536236 -324.4764174 
         145          146          147          148 
-328.6879660 -332.7216340 -336.2992019 -339.8277912 
         149          150          151          152 
-343.6155651 -347.3262003 -350.4477580 -353.1987654 
         153          154          155          156 
-356.1250837 -359.7163519 -362.5959633 -365.6828492 
         157          158          159          160 
-368.5623745 -371.8161007 -374.4125481 -377.2747733 
         161          162          163          164 
-379.7049788 -382.2380197 -384.9842962 -388.1560308 
         165          166          167          168 
-391.2678363 -394.2565381 -396.7983950 -399.0418318 
         169          170          171          172 
-400.9365768 -403.1261222 -405.6987783 -408.0515457 
         173          174          175          176 
-410.6783151 -412.8776559 -414.7690005 -416.2641724 
         177          178          179          180 
-418.5796859 -420.4585454 -421.9333296 -423.2635020 
         181 
-425.0572586 
#upper bound CI
cumsum(tapply(all_data$all_post_data$GPP_treatment_q975 ,
            round(all_data$all_post_data$Doy_water ),
            function(x) mean(x,na.rm=T)))*12/1000000*1800*48
           1            2            3            4 
  -0.9773301   -1.7365103   -2.3878065   -2.7640341 
           5            6            7            8 
  -2.7227005   -3.4101179   -4.4111840   -5.5583269 
           9           10           11           12 
  -7.1654173   -8.4983455   -9.4540580  -10.7568380 
          13           14           15           16 
 -11.2288151  -12.2292977  -13.1206277  -14.0631610 
          17           18           19           20 
 -14.1389150  -14.3652369  -15.5739079  -16.8910769 
          21           22           23           24 
 -17.9842423  -18.8776291  -19.7010002  -20.5477976 
          25           26           27           28 
 -21.6411106  -22.8572410  -24.1939702  -25.4146335 
          29           30           31           32 
 -26.6396369  -27.9126739  -29.1871161  -30.3560545 
          33           34           35           36 
 -31.5185941  -32.5824674  -33.5157878  -34.4908104 
          37           38           39           40 
 -35.2921918  -36.1091777  -36.8841326  -37.6540611 
          41           42           43           44 
 -38.1215724  -38.5804274  -38.5603566  -39.5419251 
          45           46           47           48 
 -39.8342308  -40.0778929  -40.1744216  -41.1372098 
          49           50           51           52 
 -42.2863499  -43.6891793  -44.7981032  -46.0369184 
          53           54           55           56 
 -47.5625953  -48.9108585  -49.3118606  -49.9402699 
          57           58           59           60 
 -50.8930728  -51.3288959  -52.3320939  -53.6736458 
          61           62           63           64 
 -54.4172631  -55.1698481  -55.1226951  -55.4545006 
          65           66           67           68 
 -55.5024789  -56.9522073  -58.1997283  -59.8207853 
          69           70           71           72 
 -60.9889892  -63.0823382  -64.9484184  -67.1164358 
          73           74           75           76 
 -68.3004095  -69.4188002  -71.1380464  -72.9473890 
          77           78           79           80 
 -74.4760707  -75.8791549  -77.3418599  -79.0699539 
          81           82           83           84 
 -80.3606382  -81.5585980  -82.3491779  -83.4893185 
          85           86           87           88 
 -84.0558106  -86.0617244  -87.9438891  -89.3022585 
          89           90           91           92 
 -89.7812267  -91.8090825  -93.4399883  -94.6697734 
          93           94           95           96 
 -95.9764794  -97.0232519  -98.5427449 -100.4815451 
          97           98           99          100 
-102.0695474 -103.8050232 -105.6669098 -107.5488642 
         101          102          103          104 
-109.3239329 -111.9441925 -113.2614185 -116.0425512 
         105          106          107          108 
-118.4672587 -121.3888299 -123.5823453 -127.0827851 
         109          110          111          112 
-130.5566711 -133.7018627 -135.9894172 -139.3795478 
         113          114          115          116 
-142.9347263 -146.1586379 -148.2351155 -149.8410220 
         117          118          119          120 
-152.5425718 -155.0811068 -158.0394922 -160.9246735 
         121          122          123          124 
-163.9240088 -166.5795842 -168.9078838 -171.8697704 
         125          126          127          128 
-174.7948341 -178.1248008 -181.4278160 -184.9336608 
         129          130          131          132 
-188.3855166 -191.9547448 -194.5653266 -197.9361824 
         133          134          135          136 
-202.9539171 -207.7603444 -213.0058322 -218.2271508 
         137          138          139          140 
-222.9968941 -226.4809993 -230.7781715 -235.7867826 
         141          142          143          144 
-240.5185989 -244.9356960 -249.0914903 -252.7047984 
         145          146          147          148 
-256.3440353 -259.8134558 -262.7843776 -265.7105719 
         149          150          151          152 
-268.8552036 -272.0272058 -274.8720019 -277.4709694 
         153          154          155          156 
-280.3099023 -283.8962116 -286.8704282 -290.0636647 
         157          158          159          160 
-293.2283222 -296.6235684 -299.5882151 -302.6724260 
         161          162          163          164 
-305.5551562 -308.4986825 -311.5692616 -314.7529900 
         165          166          167          168 
-317.8834524 -320.9905134 -323.6593471 -326.0462630 
         169          170          171          172 
-328.2307247 -330.5861738 -333.1920290 -335.7536914 
         173          174          175          176 
-338.4000043 -340.7926167 -342.6861411 -343.9849131 
         177          178          179          180 
-346.3452623 -348.4353914 -350.3416947 -352.2076520 
         181 
-354.3639067 
all_data$all_pre_data
write.csv(
  all_data$all_pre_data,
  paste0(out.path, Sys.Date(), "_all_pre_compost_data.csv"),
  quote = T,
  row.names = F
)

all_data$all_post_data
write.csv(
  all_data$all_pre_data,
  paste0(out.path, Sys.Date(), "_all_post_compost_data.csv"),
  quote = T,
  row.names = F
)
LS0tDQp0aXRsZTogIkRhdGEgdmlzdWFsaXphdGFpb25zIG9mIEdBTSBkYXRhIEdlbmVyYXRlZCBieSBIb3VzZW4gYm9vdHN0cmFwcGluZyA1MDAgdGltZXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyIGVjaG8gPSBGQUxTRX0NCnJtKGxpc3Q9bHMoKSkNCg0KcmVxdWlyZShkcGx5cikNCnJlcXVpcmUobWdjdikNCmxpYnJhcnkobWdjdikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoSVNMUikNCmxpYnJhcnkobWdjdikNCmxpYnJhcnkoYm9vdCkNCnJlcXVpcmUobWF0cml4U3RhdHMpDQpsaWJyYXJ5KHpvbykNCmBgYA0KDQoNCmBgYHtyfQ0KbmEuY291bnQ8LWZ1bmN0aW9uKHgpIHN1bShpcy5uYSh4KSkNCm5hLm1lYW48LWZ1bmN0aW9uKHgpIGlmZWxzZShpcy5uYW4obWVhbih4LG5hLnJtPVQpKSxOQSxtZWFuKHgsbmEucm09VCkpDQpgYGANCg0KDQojRGVmaW5pbmcgdGhlIGRhdGEgSS9PIGRpcmVjdG9yeQ0KDQpgYGB7cn0NCiMjIGNoYW5nZSByb290LnBhdGggYXMgbmVlZGVkDQpyb290LnBhdGg8LSJDOlxcVXNlcnNcXHRmZW5zXFxSX1JFUE9TXFxGbHV4X3Byb2Nlc3NpbmdcXENvbmNvcmRfUl9Db2RlXFxDb25jb3JkX1Bvc3RfUHJvY2Vzc1xcIg0KIyByb290LnBhdGg8LSJEOlxcSG91c2VuXFxGbHV4XFxEYXRhLWV4cGxvcmluZ1xcMDJfQ29uY29yZF9FZGVuXFwiDQojb3V0cHV0IGZvbGRlcg0Kb3V0LnBhdGg8LXBhc3RlMChyb290LnBhdGgsICIwMl9vdXRwdXRcXDAxX0dBTV9vdXRwdXRcXCIpDQoNCmBgYA0KDQoNCg0KI2xvYWQgdGhlIFJEQSBkYXRhIHByb2R1Y2VkIGluIDEyLUNvbmNvcmRfYm9vdHN0cmFwX0dBTVNfYWxsDQojSG91c2VuIHVwbG9hZGVkIHRoZSBkYXRhIGFzIHJkYSBmaWxlcyB0byBnb29nbGUgZHJpdmUuIA0KYGBge3J9DQoNCmFsbF9kYXRhIDwtICByZWFkUkRTIChmaWxlID0gIjIwMjItMDQtMjBfYWxsX2RhdGEucmRhIiApDQoNCmFsbF9kYWlseV9kYXRhIDwtIHJlYWRSRFMgKGZpbGUgPSAiMjAyMi0wNC0yMF9hbGxfZGF0YV9kYWlseS5yZGEiICkNCg0KDQoNCmFsbF9maWxsZWRfY3VtX21hdHJpeCA8LSByZWFkUkRTKGZpbGUgPSAiMjAyMi0wNC0yMF9hbGxfZmlsbGVkX21hdHJpeC5yZGEiKQ0KDQphbGxfZmlsbGVkX21hdHJpeCA8LSByZWFkUkRTKGZpbGUgPSAiMjAyMi0wNC0yMF9hbGxfZmlsbGVkX21hdHJpeC5yZGEiKQ0KDQphbGxfZmlsbGVkX21hdHJpeCA8LSByZWFkUkRTKGZpbGUgPSAiMjAyMi0wNC0yMF9hbGxfcHJlZGljdF9tYXRyaXgucmRhIikNCg0KYGBgDQoNCg0KYGBge3J9DQoNCmFsbF9kYXRhJGFsbF9wcmVfZGF0YQ0Kd3JpdGUuY3N2KA0KICBhbGxfZGF0YSRhbGxfcHJlX2RhdGEsDQogIHBhc3RlMChvdXQucGF0aCwgU3lzLkRhdGUoKSwgIl9hbGxfcHJlX2NvbXBvc3RfZGF0YS5jc3YiKSwNCiAgcXVvdGUgPSBULA0KICByb3cubmFtZXMgPSBGDQopDQpgYGANCg0KDQoNCiNGaWd1cmUgZm9yIGN1bXVsYXRpdmUgZmlsbGVkIE5FRSBieSBwcmUgYW5kIHBvc3QgY29tcG9zdCBhbmQgZ3JvdXANCg0KYGBge3J9DQoNCmNvbC5jb2RlMiA8LSBsaXN0KGNvbC5uYW1lID0gYygiY29udHJvbCIsICJ0cmVhdG1lbnQiKSwNCiAgICAgICAgICAgICAgICAgY29sID0gYygiZmlyZWJyaWNrMSIsICJkZWVwc2t5Ymx1ZSIpKQ0KDQojIyMjIyBGaWd1cmUgZm9yIGZpbGxlZCBORUUNCnBuZygNCiAgICBwYXN0ZTAoDQogICAgICBvdXQucGF0aCwNCiAgICAgIFN5cy5EYXRlKCksDQogICAgICAiX2ZpbGxlZF9jdW1fTkVFX2J5Z3JvdXBzLnBuZyINCiAgICApLA0KICAgIHdpZHRoID0gNi41LA0KICAgIGhlaWdodCA9IDMuNSwNCiAgICB1bml0cyA9ICJpbiIsDQogICAgcG9pbnRzaXplID0gMTAsDQogICAgcmVzID0gNDAwDQogICkNCnBhcihtYXIgPSBjKDQsIDAuMiwgMC41LCAwLjIpLCBvbWEgPSBjKDAsIDQsIDAsIDAuNSksIG1mcm93ID0gYygxLCAyKSkNCnBsb3QoYWxsX2RhdGFbWzFdXSRUSU1FU1RBTVAsDQogICAgIGFsbF9kYXRhW1sxXV0kTkVFX2ZpbGxlZF9jdW1fY29udHJvbF9tZWFuLA0KICAgICBwY2ggPSAyMCwNCiAgICAgY2V4ID0gMC43LA0KICAgICBjb2wgPSBjb2wuY29kZTIkY29sWzFdLA0KICAgICBsYXMgPSAxLA0KICAgICB5bGFiID0gIiIsDQogICAgIHhsYWIgPSAiIiwNCiAgICAgeWxpbSA9IGMoLTEwMCwgMjAwKSkNCm10ZXh0KHNpZGUgPSAyLA0KICAgICAgZXhwcmVzc2lvbihDdW11bGF0aXZlfkNPWzJdfmZsdXh+JygnKmd+Q35tXnstMn0qJyknKSwNCiAgICAgIG91dGVyID0gVCwNCiAgICAgIGxpbmUgPSAyLjUpDQptdGV4dChzaWRlID0gMSwNCiAgICAgICIyMDE5LTIwMjAiLA0KICAgICAgb3V0ZXIgPSBGLA0KICAgICAgbGluZSA9IDIuNSkNCnBvaW50cyhhbGxfZGF0YVtbMV1dJFRJTUVTVEFNUCwNCiAgICAgICBhbGxfZGF0YVtbMV1dJE5FRV9maWxsZWRfY3VtX3RyZWF0bWVudF9tZWFuLA0KICAgICAgIHBjaCA9IDIwLA0KICAgICAgIGNleCA9IDAuNywNCiAgICAgICBjb2wgPSBjb2wuY29kZTIkY29sWzJdKQ0KbGluZXMoYWxsX2RhdGFbWzFdXSRUSU1FU1RBTVAsDQogICAgICBhbGxfZGF0YVtbMV1dJE5FRV9maWxsZWRfY3VtX2NvbnRyb2xfcTAyNSwNCiAgICAgIGNvbCA9IGNvbC5jb2RlMiRjb2xbMV0sDQogICAgICBsdHkgPSAyKQ0KbGluZXMoYWxsX2RhdGFbWzFdXSRUSU1FU1RBTVAsDQogICAgICBhbGxfZGF0YVtbMV1dJE5FRV9maWxsZWRfY3VtX2NvbnRyb2xfcTk3NSwNCiAgICAgIGNvbCA9IGNvbC5jb2RlMiRjb2xbMV0sDQogICAgICBsdHkgPSAyKQ0KbGluZXMoYWxsX2RhdGFbWzFdXSRUSU1FU1RBTVAsDQogICAgICBhbGxfZGF0YVtbMV1dJE5FRV9maWxsZWRfY3VtX3RyZWF0bWVudF9xMDI1LA0KICAgICAgY29sID0gY29sLmNvZGUyJGNvbFsyXSwNCiAgICAgIGx0eSA9IDIpDQpsaW5lcyhhbGxfZGF0YVtbMV1dJFRJTUVTVEFNUCwNCiAgICAgIGFsbF9kYXRhW1sxXV0kTkVFX2ZpbGxlZF9jdW1fdHJlYXRtZW50X3E5NzUsDQogICAgICBjb2wgPSBjb2wuY29kZTIkY29sWzJdLA0KICAgICAgbHR5ID0gMikNCmxlZ2VuZCgidG9wbGVmdCIsDQogICAgICAgZmlsbCA9IGNvbC5jb2RlMiRjb2wsDQogICAgICAgYm9yZGVyID0gTkEsDQogICAgICAgbGVnZW5kID0gY29sLmNvZGUyJGNvbC5uYW1lLA0KICAgICAgIG5jb2wgPSAyLA0KICAgICAgIGNleCA9IDAuNywNCiAgICAgICBidHkgPSAibiIpDQphYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIpDQpwbG90KGFsbF9kYXRhW1syXV0kVElNRVNUQU1QLA0KICAgICBhbGxfZGF0YVtbMl1dJE5FRV9maWxsZWRfY3VtX2NvbnRyb2xfbWVhbiwNCiAgICAgcGNoID0gMjAsDQogICAgIGNleCA9IDAuNywNCiAgICAgY29sID0gY29sLmNvZGUyJGNvbFsxXSwNCiAgICAgbGFzID0gMSwNCiAgICAgeWxhYiA9ICIiLA0KICAgICB4bGFiID0gIiIsDQogICAgIHlheHQgPSAibiIsDQogICAgIHlsaW0gPSBjKC0xMDAsIDIwMCkpDQptdGV4dChzaWRlID0gMSwNCiAgICAgICIyMDIwLTIwMjEiLA0KICAgICAgb3V0ZXIgPSBGLA0KICAgICAgbGluZSA9IDIuNSkNCnBvaW50cyhhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUCwNCiAgICAgICBhbGxfZGF0YVtbMl1dJE5FRV9maWxsZWRfY3VtX3RyZWF0bWVudF9tZWFuLA0KICAgICAgIHBjaCA9IDIwLA0KICAgICAgIGNleCA9IDAuNywNCiAgICAgICBjb2wgPSBjb2wuY29kZTIkY29sWzJdKQ0KbGluZXMoYWxsX2RhdGFbWzJdXSRUSU1FU1RBTVAsDQogICAgICBhbGxfZGF0YVtbMl1dJE5FRV9maWxsZWRfY3VtX2NvbnRyb2xfcTAyNSwNCiAgICAgIGNvbCA9IGNvbC5jb2RlMiRjb2xbMV0sDQogICAgICBsdHkgPSAyKQ0KbGluZXMoYWxsX2RhdGFbWzJdXSRUSU1FU1RBTVAsDQogICAgICBhbGxfZGF0YVtbMl1dJE5FRV9maWxsZWRfY3VtX2NvbnRyb2xfcTk3NSwNCiAgICAgIGNvbCA9IGNvbC5jb2RlMiRjb2xbMV0sDQogICAgICBsdHkgPSAyKQ0KbGluZXMoYWxsX2RhdGFbWzJdXSRUSU1FU1RBTVAsDQogICAgICBhbGxfZGF0YVtbMl1dJE5FRV9maWxsZWRfY3VtX3RyZWF0bWVudF9xMDI1LA0KICAgICAgY29sID0gY29sLmNvZGUyJGNvbFsyXSwNCiAgICAgIGx0eSA9IDIpDQpsaW5lcyhhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUCwNCiAgICAgIGFsbF9kYXRhW1syXV0kTkVFX2ZpbGxlZF9jdW1fdHJlYXRtZW50X3E5NzUsDQogICAgICBjb2wgPSBjb2wuY29kZTIkY29sWzJdLA0KICAgICAgbHR5ID0gMikNCmFibGluZShoID0gMCwgY29sID0gImJsYWNrIikNCmRldi5vZmYoKQ0KYGBgDQojZmlndXJlIGZvciBnYXAgZmlsbGVkIGRhaWx5IE5FRS4gVXBkYXRlZCB0byBpbmNsdWRlIHRoZSBlcnJvciByYW5nZSBmb3IgdGhlIHBvc3QgY29tcG9zdCBjb250cm9sIHNpZGUgZGFpbHkgZGF0YQ0KYGBge3J9DQpjb2wuY29kZTQgPC0gbGlzdChjb2wubmFtZSA9IGMoImNvbnRyb2wiLCAidHJlYXRtZW50IiksDQogICAgICAgICAgICAgICAgICBjb2wgPSBjKCJmaXJlYnJpY2s0IiwgImRlZXBza3libHVlNCIpLA0KICAgICAgICAgICAgICAgICAgY29sMiA9IGMocmdiKDEsIDAsIDAsIDAuMyksIHJnYigwLCAwLCAxLCAwLjMpKSwNCiAgICAgICAgICAgICAgICAgIGNvbDMgPSBjKCJsaWdodGNvcmFsIiwgImRlZXBza3libHVlNCIpKQ0KDQojIyMjIyBGaWd1cmUgZm9yIGdhcC1maWxsZWQgZGFpbHkgTkVFDQpwbmcoDQogICAgcGFzdGUwKA0KICAgICAgb3V0LnBhdGgsDQogICAgICBTeXMuRGF0ZSgpLA0KICAgICAgIl9maWxsZWRfZGFpbHlfTkVFX2J5Z3JvdXBzLnBuZyINCiAgICApLA0KICAgIHdpZHRoID0gNi41LA0KICAgIGhlaWdodCA9IDMuNSwNCiAgICB1bml0cyA9ICJpbiIsDQogICAgcG9pbnRzaXplID0gMTAsDQogICAgcmVzID0gNDAwDQogICkNCnBhcihtYXIgPSBjKDQsIDAuMiwgMC41LCAwLjIpLCBvbWEgPSBjKDAsIDQsIDAsIDAuNSksIG1mcm93ID0gYygxLCAyKSkNCnBsb3QoMCwNCiAgICAgMCwNCiAgICAgbGFzID0gMSwNCiAgICAgeWxhYiA9ICIiLA0KICAgICB4bGFiID0gIiIsDQogICAgIHlsaW0gPSBjKC0xMCwgMTApLA0KICAgICB4bGltID0gcmFuZ2UoYWxsX2RhaWx5X2RhdGFbWzFdXSREb3lfd2F0ZXIpLA0KICAgICB0eXBlID0gIm4iKQ0KbXRleHQoc2lkZSA9IDEsDQogICAgICAiMjAxOS0yMDIwIiwNCiAgICAgIG91dGVyID0gRiwNCiAgICAgIGxpbmUgPSAyLjUpDQptdGV4dChzaWRlID0gMiwNCiAgICAgIGV4cHJlc3Npb24oQ09bMl1+Zmx1eH4nKCcqZ35Dfm1eey0yfX5kXnstMX0qJyknKSwNCiAgICAgIG91dGVyID0gVCwNCiAgICAgIGxpbmUgPSAyLjUpDQpwb2x5Z29uKGMoYWxsX2RhaWx5X2RhdGFbWzFdXSREb3lfd2F0ZXIsDQogICAgICAgICAgcmV2KGFsbF9kYWlseV9kYXRhW1sxXV0kRG95X3dhdGVyKSksDQogICAgICAgIGMoYWxsX2RhaWx5X2RhdGFbWzFdXSRORUVfZmlsbGVkX2NvbnRyb2xfcTk3NSwNCiAgICAgICAgICByZXYoYWxsX2RhaWx5X2RhdGFbWzFdXSRORUVfZmlsbGVkX2NvbnRyb2xfcTAyNSkpLA0KICAgICAgICBjb2wgPSBjb2wuY29kZTQkY29sM1sxXSwNCiAgICAgICAgYm9yZGVyID0gTkEpDQpwb2x5Z29uKGMoYWxsX2RhaWx5X2RhdGFbWzFdXSREb3lfd2F0ZXIsDQogICAgICAgICAgcmV2KGFsbF9kYWlseV9kYXRhW1sxXV0kRG95X3dhdGVyKSksDQogICAgICAgIGMoYWxsX2RhaWx5X2RhdGFbWzFdXSRORUVfZmlsbGVkX3RyZWF0bWVudF9xOTc1LA0KICAgICAgICAgIHJldihhbGxfZGFpbHlfZGF0YVtbMV1dJE5FRV9maWxsZWRfdHJlYXRtZW50X3EwMjUpKSwNCiAgICAgICAgY29sID0gY29sLmNvZGU0JGNvbDJbMl0sDQogICAgICAgIGJvcmRlciA9IE5BKQ0KcG9pbnRzKGFsbF9kYWlseV9kYXRhW1sxXV0kRG95X3dhdGVyLA0KICAgICAgIGFsbF9kYWlseV9kYXRhW1sxXV0kTkVFX2ZpbGxlZF9jb250cm9sX21lYW4sDQogICAgICAgcGNoID0gMjAsDQogICAgICAgY2V4ID0gMC43LA0KICAgICAgIGNvbCA9IGNvbC5jb2RlNCRjb2xbMV0pDQpwb2ludHMoYWxsX2RhaWx5X2RhdGFbWzFdXSREb3lfd2F0ZXIsDQogICAgICAgYWxsX2RhaWx5X2RhdGFbWzFdXSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICAgICAgIHBjaCA9IDIwLA0KICAgICAgIGNleCA9IDAuNywNCiAgICAgICBjb2wgPSBjb2wuY29kZTQkY29sWzJdKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwNCiAgICAgICBmaWxsID0gY29sLmNvZGU0JGNvbCwNCiAgICAgICBib3JkZXIgPSBOQSwNCiAgICAgICBsZWdlbmQgPSBjb2wuY29kZTIkY29sLm5hbWUsDQogICAgICAgbmNvbCA9IDIsDQogICAgICAgY2V4ID0gMC43LA0KICAgICAgIGJ0eSA9ICJuIikNCnBsb3QoMCwNCiAgICAgMCwNCiAgICAgbGFzID0gMSwNCiAgICAgeWxhYiA9ICIiLA0KICAgICB4bGFiID0gIiIsDQogICAgIHlheHQgPSAibiIsDQogICAgIHlsaW0gPSBjKC0xMCwgMTApLA0KICAgICB4bGltID0gcmFuZ2UoYWxsX2RhaWx5X2RhdGFbWzJdXSREb3lfd2F0ZXIpLA0KICAgICB0eXBlID0gIm4iKQ0KbXRleHQoc2lkZSA9IDEsDQogICAgICAiMjAyMC0yMDIxIiwNCiAgICAgIG91dGVyID0gRiwNCiAgICAgIGxpbmUgPSAyLjUpDQpwb2x5Z29uKGMoYWxsX2RhaWx5X2RhdGFbWzJdXSREb3lfd2F0ZXIsDQogICAgICAgICAgcmV2KGFsbF9kYWlseV9kYXRhW1syXV0kRG95X3dhdGVyKSksDQogICAgICAgIGMoYWxsX2RhaWx5X2RhdGFbWzJdXSRORUVfZmlsbGVkX2NvbnRyb2xfcTk3NSwNCiAgICAgICAgICByZXYoYWxsX2RhaWx5X2RhdGFbWzJdXSRORUVfZmlsbGVkX2NvbnRyb2xfcTAyNSkpLA0KICAgICAgICBjb2wgPSBjb2wuY29kZTQkY29sM1sxXSwNCiAgICAgICAgYm9yZGVyID0gTkEpDQpwb2x5Z29uKGMoYWxsX2RhaWx5X2RhdGFbWzJdXSREb3lfd2F0ZXIsDQogICAgICAgICAgcmV2KGFsbF9kYWlseV9kYXRhW1syXV0kRG95X3dhdGVyKSksDQogICAgICAgIGMoYWxsX2RhaWx5X2RhdGFbWzJdXSRORUVfZmlsbGVkX3RyZWF0bWVudF9xOTc1LA0KICAgICAgICAgIHJldihhbGxfZGFpbHlfZGF0YVtbMl1dJE5FRV9maWxsZWRfdHJlYXRtZW50X3EwMjUpKSwNCiAgICAgICAgY29sID0gY29sLmNvZGU0JGNvbDJbMl0sDQogICAgICAgIGJvcmRlciA9IE5BKQ0KcG9pbnRzKGFsbF9kYWlseV9kYXRhW1syXV0kRG95X3dhdGVyLA0KICAgICAgIGFsbF9kYWlseV9kYXRhW1syXV0kTkVFX2ZpbGxlZF9jb250cm9sX21lYW4sDQogICAgICAgcGNoID0gMjAsDQogICAgICAgY2V4ID0gMC43LA0KICAgICAgIGNvbCA9IGNvbC5jb2RlNCRjb2xbMV0pDQpwb2ludHMoYWxsX2RhaWx5X2RhdGFbWzJdXSREb3lfd2F0ZXIsDQogICAgICAgYWxsX2RhaWx5X2RhdGFbWzJdXSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICAgICAgIHBjaCA9IDIwLA0KICAgICAgIGNleCA9IDAuNywNCiAgICAgICBjb2wgPSBjb2wuY29kZTQkY29sWzJdKQ0KZGV2Lm9mZigpDQoNCiMjIHNhdmUgb3V0cHV0DQpzYXZlUkRTKGFsbF9kYWlseV9kYXRhLA0KICAgICAgICBwYXN0ZTAob3V0LnBhdGgsIFN5cy5EYXRlKCksICJfYWxsX2RhaWx5X2RhdGEucmRhIikpDQpgYGANCg0KDQoNCiNUb21teSBqdXN0IGdldHRpbmcgYSBzZW5zZSBvZiB0aGUgbGlzdHMgYW5kIGRhdGENCg0KYGBge3J9DQojUmVjb19tZWFuIGFuZCBxdWFudGlsZXMNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiwgeWxpbSA9IGMoMCwzNSkgKQ0KDQpwYXIobmV3PVRSVUUpDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTk3NSwgY29sID0gJ3JlZCcsIHlsaW0gPSBjKDAsMzUpKQ0KDQpwYXIobmV3ID0gVFJVRSkNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTAyNSwgY29sID0gJ2JsdWUnLCB5bGltID0gYygwLDM1KSkNCg0KI05FRQ0KIzEvMiBob3VybHkNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkTkVFX2ZpbGxlZF9jb250cm9sX21lYW4pDQoNCiNjdW11bGF0aXZlIHdpdGggZXJyb3INCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkTkVFX2ZpbGxlZF9jdW1fY29udHJvbF9xOTc1LCBjb2w9J3JlZCcsIHlsaW0gPSBjKDAsMjAwKQ0KICAgICApDQoNCnBhcihuZXc9VFJVRSkNCg0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCwgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX2N1bV9jb250cm9sX21lYW4sIGNvbD0nZ3JleScsIHlsaW0gPSBjKDAsMjAwKSkNCg0KcGFyKG5ldyA9IFRSVUUpDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkTkVFX2ZpbGxlZF9jdW1fY29udHJvbF9xMDI1ICwgY29sPSdyZWQnLCB5bGltID0gYygwLDIwMCkNCiAgICAgKQ0KDQpgYGANCiNDcmVhdGluZyBhIG5ldyBkYXRhIGNvbHVtbiBmb3IgcmVzcGlyYXRpb24gDQojY29tYmluYXRpb24gb2YgRGF5IFJlY29fcHJlZGljdF9tZWFuIGFubmQgTkVFX2ZpbGxlZF9fbWVhbnMNCiNPdXIgbmlnaHQgdGltZSByZXNwaXJhdGlvbiBkYXRhIHdpbGwgYmUgZGlyZWN0bHkgbWVhc3VyZWQsIHdoaWxlIG91ciBkYXl0aW1lIHJlc3BpcmF0aW9uIGRhdGEgd2lsbCBiZSBtb2RlbGVkLiANCg0KI1RoaXMgaXMgYWN0dWFsbHkgdW5ubmVjY2VzYXJ5LiBKdXN0IGdvaW5nIHRvIHVzZSBORUUtIFJlY28gcHJlZGljdCBhbmQgdGhlbiBmb3JjZSBhbGwgbmlnaHRpbWUgR1BQIHRvIHplcm8uIA0KDQpgYGB7cn0NCg0KDQojIyMjQ29udHJvbCBzaWRlIHByZS1jb21wb3N0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBjcmVhdGluZyBuZXcgY29sdW1uIGNhbGxlZCBSRUNPX2NvbnRyb2xfRklODQphbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19jb250cm9sX0ZJTiA8LSAoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fcHJlZGljdF9jb250cm9sX21lYW4gKiAxKQ0KDQoNCg0KDQojYXNzaWduaW5nIGFsbCBuaWdodCB0aW1lIHJlc3BpcmF0aW9uIGdhcCBmaWxsIG5pZ2h0IE5FRQ0KDQphbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19jb250cm9sX0ZJTlsoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJnIDw9IDEwICldPC0NCiAgYWxsX2RhdGEkYWxsX3ByZV9kYXRhJE5FRV9maWxsZWRfY29udHJvbF9tZWFuIFsoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJnIDw9IDEwICldDQoNCiNwbG90IGFuZCBzdW1tYXJ5IG9mIHJlY29uIGNvbnRyb2wgZmluIChvYnNlcnZlZCBuaWdodHRpbWUgTkVFLCBhbmQgbW9kZWxlZCBSZWNvKQ0KcGxvdChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19jb250cm9sX0ZJTiApDQoNCnN1bW1hcnkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fY29udHJvbF9GSU4pDQoNCiNwbG90IGFuZCBzdW1tYXJ5IG9mIGp1c3QgbW9kZWxlZCBSZWNvDQpwbG90KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9tZWFuKQ0Kc3VtbWFyeShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbikNCg0KDQoNCiNUaG91Z2h0IEkgaGFkIHRvIGRvIGFsbCB0aGlzIGJlbG93LCBidXQgcmVhbGx5IGRvIG5vdCBuZWVkIHRvLiBDYW4ganVzdCB1c2UgdGhlIGZpbGxlZCBORUUgKHNlZSBhYm92ZSkuIEZpbGxlZCBORUUgaGFzIGFjdHVhbCBORUUgdmFsdWVzIGZvciBuaWdodCB0aW1lIHBsdXMgR0FNIGZpbGxlZC4gVGhpcyBlbnN1cmVzIGJvdGggYWN0dWFsbHkgbWVhc3VyZWQgdmFsdWVzLCBleGNsdWRpbmcgYmFkIGRhdGEgYW5kIHRoZSBiZXN0IG1vZGVsZWQgbmlnaCB0aW1lIE5FRS8gUmVjbw0KDQojQ3JlYXRpbmcgb2JzZXJ2ZWQgTkVFIHZhcmlhYmxlIHRvIGJlIHVzZWQgZm9yIG5pZ2h0dGltZSByZWNvDQoNCiMgYWxsX2RhdGFbWzFdXSRORUVfY29udHJvbF9vYnNlcnZlZFthbGxfZGF0YVtbMV1dJHRyZWF0bWVudD09ICJjb250cm9sX3ByZV9jb21wb3N0Il0gPC0gKGFsbF9kYXRhW1sxXV0kTkVFW2FsbF9kYXRhW1sxXV0kdHJlYXRtZW50ID09ICJjb250cm9sX3ByZV9jb21wb3N0Il0pDQojDQojIHBsb3QoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJE5FRV9jb250cm9sX29ic2VydmVkKSAjIGFyb3VuZCAxLzIgbmlnaHQgb2JzZXJ2ZWQgcmVjbyBkYXRhIGlzIG5lZy4gbWF5YmUganVzdCB1c2UgbW9kZWxlZCBkYXRhPw0KIw0KIyAjbG9va2luZyBhdCBob3cgdGhlIG5ldyB2YXJpYWJsZSBsb29rDQojIHN1bW1hcnkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJE5FRV9jb250cm9sX29ic2VydmVkKQ0KIyBzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX2NvbnRyb2xfRklOKQ0KIw0KIyAjYXNzaWduaW5nIG5pZ2h0IHRpbWUgbWVhc3VyZWQgTkVFIHZhbHVlcyB0byB0aGUgYXNzb2NpYXRlZCBuaWdodCB0aW1lIHJlc3BpcmF0aW9uIHZhbHVlcw0KIw0KIyBhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19jb250cm9sX0ZJTlthbGxfZGF0YSRhbGxfcHJlX2RhdGEkUmcgPD0gMTAgJiAhaXMubmEoIGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRORUVfY29udHJvbF9vYnNlcnZlZCldPC0NCiMgICBhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX2NvbnRyb2xfb2JzZXJ2ZWRbYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJnPD0xMCAgJiAhaXMubmEoIGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRORUVfY29udHJvbF9vYnNlcnZlZCldDQojDQojDQojICNzZWVpbmcgaG93IHRoaXMgc2hha2VzIG91dA0KIyBwbG90KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX2NvbnRyb2xfRklOICkNCiMNCiMgc3VtbWFyeShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19jb250cm9sX0ZJTikNCiMNCiMgc3VtbWFyeShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbikNCiMNCiMgc3VtbWFyeShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX2ZpbGxlZF9jb250cm9sX21lYW4pDQojDQojIHBsb3QoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFRJTUVTVEFNUCwgYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fY29udHJvbF9GSU4sIGNvbCA9ICdyZWQnLCB5bGltID0gYygtMTAsIDMwKSkNCiMgcGFyKG5ldz0gVFJVRSkNCiMgcGxvdChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkVElNRVNUQU1QLCBhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiwgY29sID0gJ2JsdWUnLCB5bGltID0gYygtMTAsIDMwKSkNCg0KIyMjIyMjIyMjIyMjIyNDb250cm9sIHNpZGUgcG9zdC1jb21wb3N0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2NyZWF0aW5nIG5ldyBjb2x1bW4gY2FsbGVkIFJFQ09fY29udHJvbF9GSU4NCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19jb250cm9sX0ZJTiA8LSAoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9tZWFuICogMSkNCg0KI2Fzc2lnbmluZyBhbGwgbmlnaHQgdGltZSByZXNwaXJhdGlvbiBnYXAgZmlsbCBuaWdodCBORUUNCg0KYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX2NvbnRyb2xfRklOWyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJnIDw9IDEwICldPC0NCiAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX2NvbnRyb2xfbWVhbiBbKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPD0gMTAgKV0NCg0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fY29udHJvbF9GSU4gKQ0KDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19jb250cm9sX0ZJTikNCg0Kc3VtbWFyeShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfY29udHJvbF9tZWFuKQ0KDQoNCiMjIyMjIyMjIyMjIyMjI3RyZWF0bWVudCBzaWRlIHByZSBjb21wb3N0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fdHJlYXRtZW50X0ZJTiA8LSAoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfbWVhbiAqIDEpDQoNCg0KDQojIyMjIyMjIyMjI3RyZWF0bWVudCBzaWRlIHBvc3QtY29tcG9zdCMjIyMjIyMjIyMjIyMjIw0KI2NyZWF0aW5nIG5ldyBjb2x1bW4gY2FsbGVkIFJFQ09fdHJlYXRtZW50X0ZJTg0KYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3RyZWF0bWVudF9GSU4gPC0gKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuICogMSkNCg0KDQojYXNzaWduaW5nIGFsbCBuaWdodCB0aW1lIHJlc3BpcmF0aW9uIGdhcCBmaWxsIG5pZ2h0IE5FRSBwcmUgY29tcG9zdA0KDQphbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT190cmVhdG1lbnRfRklOWyhhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUmcgPD0gMTAgKV08LQ0KICBhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX2ZpbGxlZF90cmVhdG1lbnRfbWVhbiBbKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSZyA8PSAxMCApXQ0KDQpwbG90KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3RyZWF0bWVudF9GSU4gKQ0KDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3RyZWF0bWVudF9GSU4pDQoNCnN1bW1hcnkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJE5FRV9maWxsZWRfdHJlYXRtZW50X21lYW4pDQoNCg0KDQojYXNzaWduaW5nIGFsbCBuaWdodCB0aW1lIHJlc3BpcmF0aW9uIGdhcCBmaWxsIG5pZ2h0IE5FRSBwb3N0IGNvbXBvc3QNCg0KYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3RyZWF0bWVudF9GSU5bKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPD0gMTAgKV08LQ0KICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfdHJlYXRtZW50X21lYW4gWyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJnIDw9IDEwICldDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3RyZWF0bWVudF9GSU4sIHlsaW0gPSBjKDAsNSksIGNvbCA9ICJibHVlIiApDQpwYXIobmV3PSBUUlVFKQ0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfbWVhbiwgeWxpbSA9IGMoMCw1KSwgY29sID0gInJlZCIpDQoNCnN1bW1hcnkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3RyZWF0bWVudF9GSU4pDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuKQ0KDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkTkVFX2ZpbGxlZF90cmVhdG1lbnRfbWVhbikNCg0KYGBgDQoNCg0KI2NyZWF0aW5nIDEvMiBob3VyIEdQUCBjb250cm9sIGFuZCB0cmVhdG1lbnQgc2lkZSB2YWx1ZXMgDQojc3VtKG5lZSkgPSBzdW0oZ3BwK3JlY28pDQojc3VtIChuZWUtcmVjbyk9IHN1bSAoZ3BwKQ0KIA0KYGBge3J9DQoNCiMjIyMjI0NyZWF0aW5nIDEvMiBob3VybHkgR1BQIHZhcmlhYmxlIGZvciBwb3N0IGNvbXBvc3QjIyMjIyMjIyMjDQoNCiNjb250cm9sIHBvc3QgY29tcG9zdChSZWNvIHByZWRpY3RfY29udHJvbCBtZWFuIG9yIFJlY29fY29udHJvbF9maW4pDQojVXNlIFJlY29fcHJlZGljdCBjb250cm9sIG1lYW4gYW5kIGZvcmNlIGFsbCBuaWdodHRpbWUgR1BQIHRvIHplcm8uIA0KYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9tZWFuIDwtIChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfY29udHJvbF9tZWFuIC0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9tZWFuKQ0KDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfbWVhbikNCg0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX21lYW4pDQoNCiN0cmVhdG1lbnQgcG9zdCBjb21wb3N0DQphbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbjwtIChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfdHJlYXRtZW50X21lYW4gLSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfbWVhbiAgKQ0KDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9tZWFuKQ0KDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X21lYW4pDQoNCiMjIyMjIyNNYWtlIGFsbCBuaWdodCB0aW1lIEdQUCB6ZXJvIyMjIyMjIyMjIyMjICNOZWVkIHRvIGRvIHRoaXMgaWYgdXNpbmcgcmVjb19wcmVkaWN0IQ0KDQojbmlnaHQgdGltZSBkZWZpbmVkIGFzIFJnPD0gMTANCg0KI2NvbnRyb2wgcG9zdCBjb21wb3N0DQphbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX21lYW4gWyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJnIDw9IDEwICldPC0wDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9tZWFuKQ0KDQpzdW1tYXJ5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfbWVhbikNCg0KI3RyZWF0bWVudCAgcG9zdCBjb21wb3N0DQphbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbiBbKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPD0gMTAgKV08LTANCg0KIyMjIyMjIyMjIzk1JSBDSSBmb3IgR1BQIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiNtYWtpbmcgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGZvciBHUFAgY29udHJvbCBwb3N0IGNvbXBvc3QNCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfcTAyNSA8LSAoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfcHJlZGljdF9jb250cm9sX3EwMjUgLSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF9jb250cm9sX3EwMjUpDQoNCg0KYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9xOTc1IDwtIChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9wcmVkaWN0X2NvbnRyb2xfcTk3NSAtIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTk3NSkNCg0KI21ha2luZyA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIEdQUCB0cmVhdG1lbnQgcG9zdCBjb21wb3N0DQphbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfcTAyNSA8LSAoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfcHJlZGljdF90cmVhdG1lbnRfcTAyNSAtIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xMDI1KQ0KDQoNCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9xOTc1IDwtIChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9wcmVkaWN0X3RyZWF0bWVudF9xOTc1IC0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X3E5NzUpDQoNCiMjIyMjIyMjIyNwbG90dGluZyAxLzJob3VybHkgUmVjbyBhbmQgR1BQIyMjIyMjIyMjIyMjDQoNCiNjb250cm9sIHBvc3QgY29tcG9zdA0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUFsoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSZyA+IDEwICldLCBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX21lYW5bKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPiAxMCApXSwgY29sPSdncmVlbicsIHlsaW0gPSBjKC0xMiw2KSkNCg0KDQpwYXIobmV3PVRSVUUpDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiAsIGNvbD0ncmVkJywgeWxpbSA9IGMoLTEyLDYpDQogICAgICkNCnBhcihuZXc9VFJVRSkNCg0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCwgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX2NvbnRyb2xfbWVhbiAsIHlsaW0gPSBjKC0xMiw2KSkNCg0KDQpwbG90KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QLCBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX21lYW4sIHlsaW0gPSBjKC0xMiw2KSkNCg0KI3RyZWF0bWVudCBwb3N0IGNvbXBvc3QNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVBbKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPiAxMCApXSwgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X21lYW5bKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPiAxMCApXSwgY29sPSdncmVlbicsIHlsaW0gPSBjKC0xMiw2KSkNCg0KDQpwYXIobmV3PVRSVUUpDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuICwgY29sPSdyZWQnLCB5bGltID0gYygtMTIsNikNCiAgICAgKQ0KcGFyKG5ldz1UUlVFKQ0KDQpwbG90KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QLCBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfdHJlYXRtZW50X21lYW4gLCB5bGltID0gYygtMTIsNikpDQoNCg0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCwgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X21lYW4sIHlsaW0gPSBjKC0xMiw2KSkNCg0KYGBgDQoNCiNHUFAgcHJlIGNvbXBvc3QgdmFyaWFibGUNCg0KYGBge3J9DQojIyMjIyNDcmVhdGluZyAxLzIgaG91cmx5IEdQUCB2YXJpYWJsZSMjIyMjIyMjIyMNCg0KI2NvbnRyb2wgcHJlIGNvbXBvc3QNCmFsbF9kYXRhJGFsbF9wcmVfZGF0YSRHUFBfY29udHJvbF9tZWFuIDwtIChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX2ZpbGxlZF9jb250cm9sX21lYW4gLSBhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbikNCg0Kc3VtbWFyeShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX2NvbnRyb2xfbWVhbikNCg0KI3RyZWF0bWVudCBwcmUgY29tcG9zdA0KYWxsX2RhdGEkYWxsX3ByZV9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbjwtIChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX2ZpbGxlZF90cmVhdG1lbnRfbWVhbiAtIGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4gICkNCg0Kc3VtbWFyeShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX3RyZWF0bWVudF9tZWFuKQ0KDQojIyMjIyMjTWFrZSBhbGwgbmlnaHQgdGltZSBHUFAgemVybyMjIyMjIyMjIyMjIyBOZWVkIHRvIGRvIHRoaXMgc2luY2UgdXNpbmcgUmVjb19wcmVkaWN0X21lYW4NCiNuaWdodCB0aW1lIGRlZmluZWQgYXMgUmc8PSAxMA0KDQojICNjb250cm9sIHByZSBjb21wb3N0DQphbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX2NvbnRyb2xfbWVhbiBbKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSZyA8PSAxMCApXTwtMA0KIA0KIyAjdHJlYXRtZW50ICBwcmUgY29tcG9zdA0KYWxsX2RhdGEkYWxsX3ByZV9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbiBbKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSZyA8PSAxMCApXTwtMA0KDQojIyMjIyMjIyMjOTUlIENJIGZvciBHUFAjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KI21ha2luZyA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIEdQUCBjb250cm9sIHByZSBjb21wb3N0DQphbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX2NvbnRyb2xfcTAyNSA8LSAoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJE5FRV9wcmVkaWN0X2NvbnRyb2xfcTAyNSAtIGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9xMDI1KQ0KDQoNCmFsbF9kYXRhJGFsbF9wcmVfZGF0YSRHUFBfY29udHJvbF9xOTc1IDwtIChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX3ByZWRpY3RfY29udHJvbF9xOTc1IC0gYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fcHJlZGljdF9jb250cm9sX3E5NzUpDQoNCiNtYWtpbmcgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGZvciBHUFAgdHJlYXRtZW50IHByZSBjb21wb3N0DQphbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX3RyZWF0bWVudF9xMDI1IDwtIChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkTkVFX3ByZWRpY3RfdHJlYXRtZW50X3EwMjUgLSBhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xMDI1KQ0KDQoNCmFsbF9kYXRhJGFsbF9wcmVfZGF0YSRHUFBfdHJlYXRtZW50X3E5NzUgPC0gKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRORUVfcHJlZGljdF90cmVhdG1lbnRfcTk3NSAtIGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X3E5NzUpDQpgYGANCg0KDQoNCg0KDQoNCiNCYXNpYyBwbG90cyBvZiBjb250cm9sIHNpZGUgcG9zdCBjb21wb3N0IHRvIG1ha2Ugc3VyZSBJJ20gb24gcmlnaHQgdHJhY2sgYmVmb3JlIG1ha2luZyBmaW5hbCBmaWd1cmVzDQpgYGB7cn0NCiMjIyMjIyMjIyMjIyNDdW11bGF0aXZlIEdQUCwgUkVDTyAsIE5FRSBjb250cm9sIHNpZGUgcG9zdCBjb21wb3N0IGdyb3dpbmcgc2Vhc29uIyMjIyMNCg0KDQoNCiNjdW11bGF0aXZlIHJlc3BpcmF0aW9uIGNvbnRyb2wgc2lkZQ0KcGxvdChjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgsDQoNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9J0RheXMgb2YgdGhlIGdyb3dpbmcgc2Vhc29uJywNCiAgICAgeWxhYj1leHByZXNzaW9uKEN1bXVsYXRpdmV+UmVjb35HUFB+TkVFficoJ35nfkN+bV57LTJ9ficpJyksDQogICAgIG1haW49J1Bvc3QgQ29tcG9zdCBDb250cm9sIFNpZGUgQ3VtdWxhdGl2ZSBSRUNPLCBHUFAsIE5FRScsDQogICAgIGNleC5sYWIgPSAwLjgsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTEsDQogICAgIGNvbD0icmVkIiwNCiAgICAgbHdkPTIsDQogICAgIHR5cGU9ImwiKQ0KYXhpcyhzaWRlPTEsYXQ9c2VxKDAsMzYwLGJ5PTMwKSkNCg0KcGFyKG5ldyA9IFRSVUUpDQpwbG90KGN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9xOTc1ICwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgsDQoNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9J0RheXMgb2YgdGhlIGdyb3dpbmcgc2Vhc29uJywNCiAgICAgeWxhYj1leHByZXNzaW9uKEN1bXVsYXRpdmV+UmVjb35HUFB+TkVFficoJ35nfkN+bV57LTJ9ficpJyksDQogICAgIG1haW49J1Bvc3QgQ29tcG9zdCBDb250cm9sIFNpZGUgQ3VtdWxhdGl2ZSBSRUNPLCBHUFAsIE5FRScsDQogICAgIGNleC5sYWIgPSAwLjgsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTIsDQogICAgIGNvbD0icmVkIiwNCiAgICAgbHdkPTIsDQogICAgIHR5cGU9ImwiKQ0KYXhpcyhzaWRlPTEsYXQ9c2VxKDAsMzYwLGJ5PTMwKSkNCg0KcGFyKG5ldyA9IFRSVUUpDQpwbG90KGN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9xMDI1ICAsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4LA0KDQogICAgIHhheHQ9J24nLA0KICAgICB4bGFiPSdEYXlzIG9mIHRoZSBncm93aW5nIHNlYXNvbicsDQogICAgIHlsYWI9ZXhwcmVzc2lvbihDdW11bGF0aXZlflJlY29+R1BQfk5FRX4nKCd+Z35Dfm1eey0yfX4nKScpLA0KICAgICBtYWluPSdQb3N0IENvbXBvc3QgQ29udHJvbCBTaWRlIEN1bXVsYXRpdmUgUkVDTywgR1BQLCBORUUnLA0KICAgICBjZXgubGFiID0gMC44LA0KICAgICB5bGltID0gYygtODAwLDgwMCksDQogICAgIGx0eT0yLA0KICAgICBjb2w9InJlZCIsDQogICAgIGx3ZD0yLA0KICAgICB0eXBlPSJsIikNCmF4aXMoc2lkZT0xLGF0PXNlcSgwLDM2MCxieT0zMCkpDQoNCnBhcihuZXcgPSBUUlVFKQ0KI2N1bXVsYXRpdmUgR1BQIGNvbnRyb2wgc2lkZQ0KDQpwbG90KGN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9tZWFuLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OCwNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9JycsDQogICAgIHlsYWI9JycsDQogICAgIG1haW49JycsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTEsDQogICAgIGNvbD0iZ3JlZW4iLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCg0KcGxvdChjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfcTAyNSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgsDQogICAgIHhheHQ9J24nLA0KICAgICB4bGFiPScnLA0KICAgICB5bGFiPScnLA0KICAgICBtYWluPScnLA0KICAgICB5bGltID0gYygtODAwLDgwMCksDQogICAgIGx0eT0yLA0KICAgICBjb2w9ImdyZWVuIiwNCiAgICAgbHdkPTIsDQogICAgIHR5cGU9ImwiKQ0KYXhpcyhzaWRlPTEsYXQ9c2VxKDAsMzYwLGJ5PTMwKSkNCg0KcGFyKG5ldyA9IFRSVUUpDQoNCnBsb3QoY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX3E5NzUgLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OCwNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9JycsDQogICAgIHlsYWI9JycsDQogICAgIG1haW49JycsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTIsDQogICAgIGNvbD0iZ3JlZW4iLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCg0KcGxvdChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCwgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX2N1bV9jb250cm9sX21lYW4sIA0KICAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9JycsDQogICAgIHlsYWI9JycsDQogICAgIG1haW49JycsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTEsDQogICAgIGNvbD0iZ3JleSIsDQogICAgIGx3ZD0yLA0KICAgICB0eXBlPSJsIikNCiAgICAgDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID1UUlVFKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAiYmxhY2siKQ0KDQpgYGANCg0KYGBge3J9DQoNCiMjIyMjIyMjIyMjIyNDdW11bGF0aXZlIEdQUCwgUkVDTyAsIE5FRSB0cmVhdG1ldHQgc2lkZSBwb3N0IGNvbXBvc3QgZ3Jvd2luZyBzZWFzb24jIyMjIw0KI2N1bXVsYXRpdmUgcmVzcGlyYXRpb24gdHJlYXRtZW50IHNpZGUNCnBsb3QoY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfbWVhbiwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgsDQoNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9J0RheXMgb2YgdGhlIGdyb3dpbmcgc2Vhc29uJywNCiAgICAgeWxhYj1leHByZXNzaW9uKEN1bXVsYXRpdmV+UmVjb35HUFB+TkVFficoJ35nfkN+bV57LTJ9ficpJyksDQogICAgIG1haW49J1Bvc3QgQ29tcG9zdCBUcmVhdG1lbnQgU2lkZSBDdW11bGF0aXZlIFJFQ08sIEdQUCwgTkVFJywNCiAgICAgY2V4LmxhYiA9IDAuOCwNCiAgICAgeWxpbSA9IGMoLTgwMCw4MDApLA0KICAgICBsdHk9MSwNCiAgICAgY29sPSJyZWQiLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCnBsb3QoY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfcTk3NSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgsDQoNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9J0RheXMgb2YgdGhlIGdyb3dpbmcgc2Vhc29uJywNCiAgICAgeWxhYj1leHByZXNzaW9uKEN1bXVsYXRpdmV+UmVjb35HUFB+TkVFficoJ35nfkN+bV57LTJ9ficpJyksDQogICAgIG1haW49J1Bvc3QgQ29tcG9zdCBUcmVhdG1lbnQgU2lkZSBDdW11bGF0aXZlIFJFQ08sIEdQUCwgTkVFJywNCiAgICAgY2V4LmxhYiA9IDAuOCwNCiAgICAgeWxpbSA9IGMoLTgwMCw4MDApLA0KICAgICBsdHk9MiwNCiAgICAgY29sPSJyZWQiLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCnBsb3QoY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfcTAyNSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgsDQoNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9J0RheXMgb2YgdGhlIGdyb3dpbmcgc2Vhc29uJywNCiAgICAgeWxhYj1leHByZXNzaW9uKEN1bXVsYXRpdmV+UmVjb35HUFB+TkVFficoJ35nfkN+bV57LTJ9ficpJyksDQogICAgIG1haW49J1Bvc3QgQ29tcG9zdCBUcmVhdG1lbnQgU2lkZSBDdW11bGF0aXZlIFJFQ08sIEdQUCwgTkVFJywNCiAgICAgY2V4LmxhYiA9IDAuOCwNCiAgICAgeWxpbSA9IGMoLTgwMCw4MDApLA0KICAgICBsdHk9MiwNCiAgICAgY29sPSJyZWQiLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCiNjdW11bGF0aXZlIEdQUCB0cmVhdG1lbnQgc2lkZQ0KDQpwbG90KGN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X21lYW4sDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4LA0KICAgICB4YXh0PSduJywNCiAgICAgeGxhYj0nJywNCiAgICAgeWxhYj0nJywNCiAgICAgbWFpbj0nJywNCiAgICAgeWxpbSA9IGMoLTgwMCw4MDApLA0KICAgICBsdHk9MSwNCiAgICAgY29sPSJncmVlbiIsDQogICAgIGx3ZD0yLA0KICAgICB0eXBlPSJsIikNCmF4aXMoc2lkZT0xLGF0PXNlcSgwLDM2MCxieT0zMCkpDQoNCnBhcihuZXcgPSBUUlVFKQ0KDQpwbG90KGN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X3EwMjUgLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OCwNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9JycsDQogICAgIHlsYWI9JycsDQogICAgIG1haW49JycsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTIsDQogICAgIGNvbD0iZ3JlZW4iLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCg0KcGxvdChjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9xOTc1LA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OCwNCiAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9JycsDQogICAgIHlsYWI9JycsDQogICAgIG1haW49JycsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTIsDQogICAgIGNvbD0iZ3JlZW4iLA0KICAgICBsd2Q9MiwNCiAgICAgdHlwZT0ibCIpDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID0gVFJVRSkNCg0KI2N1bXVsYXRpdmUgTkVFIHRyZWF0bWVudCBzaWRlDQoNCnBsb3QoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAsIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkTkVFX2ZpbGxlZF9jdW1fdHJlYXRtZW50X21lYW4sIA0KICAgICAgeGF4dD0nbicsDQogICAgIHhsYWI9JycsDQogICAgIHlsYWI9JycsDQogICAgIG1haW49JycsDQogICAgIHlsaW0gPSBjKC04MDAsODAwKSwNCiAgICAgbHR5PTEsDQogICAgIGNvbD0iZ3JleSIsDQogICAgIGx3ZD0yLA0KICAgICB0eXBlPSJsIikNCiAgICAgDQpheGlzKHNpZGU9MSxhdD1zZXEoMCwzNjAsYnk9MzApKQ0KDQpwYXIobmV3ID1UUlVFKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAiYmxhY2siKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiNibGFuaw0KYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRibGFuayA9IChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fY29udHJvbF9GSU4gKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQ0KDQphbGxfZGF0YSRhbGxfcG9zdF9kYXRhJGJsYW5rWyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJGJsYW5rID09IDApXSA8LQ0KICBOQQ0KYGBgDQoNCg0KI1Bsb3R0aW5nIE5FRSB2YXJpYWJsZXMjIyMNCg0KIyMjI3BhbmVsIDEgaGFsZi1ob3VybHkgbm9uLWdhcCBmaWxsZWQgYW5kIGhhbGYgaG91cmx5IGdhcCBmaWxsZWQjIyMNCiNwYW5lbCAxLzIgaG91cmx5IEdQUF90cmVhdG1lbnRfbWVhbiBhbmQgUmVzcGlyYXRpb24NCiNwYW5lbCAzIGN1bXVsYXRpdmUgc3VtcyBvZiBORUUsIFJlc3BpcmF0aW9uIGFuZCBuZWcgR1BQDQoNCg0KI1RyZWF0bWVudCBzaWRlIDEvMiBob3VybHkNCmBgYHtyfQ0Kc3VtbWFyeSAoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJE5FRSkNCg0Kc3VtbWFyeShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRSkNCg0KaGVhZChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkVElNRVNUQU1QKQ0KDQpucm93KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRORUVfcHJlZGljdF9jb250cm9sX21lYW4NCiAgICAgICAgKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KDQoNCmNvbC5jb2RlMyA8LSBsaXN0KGNvbC5uYW1lID0gYygiY29udHJvbCAobW9kZWxlZCkiLCAidHJlYXRtZW50IChtb2RlbGVkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRyb2wgKG9ic2VydmVkKSIsICJ0cmVhdG1lbnQgKG9ic2VydmVkKSIpLA0KICAgICAgICAgICAgICAgICAgY29sID0gYygiZmlyZWJyaWNrMSIsICJkZWVwc2t5Ymx1ZSIsICJmaXJlYnJpY2s0IiwgImRlZXBza3libHVlNCIpKQ0KDQojZmlndXJlIGZvciBjdW11bGF0aXZlIGFuZCBmaWxsZWQgTkVFIGFuZCBSZWNvDQoNCnRhcmdldC5wbG90LnZhcl9uZWUgPC0gYygiTkVFX2ZpbGxlZF90cmVhdG1lbnRfbWVhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIkdQUF90cmVhdG1lbnRfbWVhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgImJsYW5rIikNCg0KdGFyZ2V0LnBsb3QudmFyX25lZS50aXRsZSA8LSBjKA0KICBleHByZXNzaW9uKEZDIH4gJygnIH4gbXUgfiBtb2wgfiBtIF4gey0yIH0gfiBzIF4geyAtMSB9IH4gJyknKSwNCiAgZXhwcmVzc2lvbihHUFAgfiAnOycgfiBSZWNvficoJyB+IG11IH4gbW9sIH4gbSBeIHstMiB9IH4gcyBeIHsgLTEgfSB+ICcpJyksDQogIGV4cHJlc3Npb24oQ3VtdWxhdGl2ZX5zdW1+ICcoJyB+IGcgfiBDIH4gbSBeIHstMiB9IH4gJyknKQ0KKQ0KDQojIyBsb2NhdGUgdGhlIHN0YXJ0IG9mIGVhY2ggbW9udGgNCm1vbnRoLmxvYyA8LSB3aGljaCgNCiAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkbWRheSA9PSAxICYNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCRob3VyID09IDAgJg0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJG1pbiA9PSAwDQopDQptb250aC50aWNrcyA8LQ0KICBzdWJzdHIoc2VxKA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QW21vbnRoLmxvY1sxXV0sDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVBbbW9udGgubG9jW2xlbmd0aChtb250aC5sb2MpXV0sDQogICAgYnkgPSAibW9udGhzIg0KICApLCA2LCA3KQ0KDQojIyBkYWlseSBhdmVyYWdlIHZhbHVlcw0KZGFpbHlfbmVlLnRtcCA8LQ0KICBkYXRhLmZyYW1lKA0KICAgIGRhdGUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG1pbg0KICAgICksDQogICAgZGFpbHlfbmVlID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHAgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbiwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbyA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKQ0KICApDQoNCg0KIyMgY29udmVydCBORUUsIFJFQ09fcHJlZGljdF90cmVhdG1lbnRfbWVhbiBncHAgdG8gY3VtdWxhdGl2ZSBzdW0gb2YgY2FyYm9uDQojIGNvbnZlcnQgdG8gY3VtdWxhdGl2ZSBjYXJib24NCmZvcihsbCBpbiAyOjQpIHsNCiAgIyBjb252ZXJ0IHRvIGRhaWx5IHVuaXRzDQogIGRhaWx5X25lZS50bXBbLCBsbF0gPC0NCiAgICBkYWlseV9uZWUudG1wWywgbGxdICogMTIgLyAxMDAwMDAwICogMTgwMCAqIDQ4DQogIGRhaWx5X25lZS50bXBbaXMubmEoZGFpbHlfbmVlLnRtcFssIGxsXSksIGxsXSA8LSAwDQogIA0KICAjIGNhbGN1bGF0ZSBjdW11bGF0aXZlIHN1bSwgaGFyZC1jb2RlZCB3aXRoIGZpcnN0L3NlY29uZCB5ZWFycw0KICBkYWlseV9uZWUudG1wWzE6MzY1LCBsbF0gPC0NCiAgICBjdW1zdW0oZGFpbHlfbmVlLnRtcFsxOjM2NSwgbGxdKQ0KICBkYWlseV9uZWUudG1wWzM2Njpucm93KGRhaWx5X25lZS50bXApLCBsbF0gPC0NCiAgICBjdW1zdW0oZGFpbHlfbmVlLnRtcFszNjY6bnJvdyhkYWlseV9uZWUudG1wKSwgbGxdKQ0KICANCiAgIyBzZXQgYnJlYWsgKG1pc3NpbmcgdmFsdWUpIGJldHdlZW4gdHdvIHllYXJzDQogIGRhaWx5X25lZS50bXBbMzY2LCBsbF0gPC0gTkENCn0NCg0KIyMgYmVnaW4gcGxvdCAgIA0KcG5nKA0KICBwYXN0ZTAob3V0LnBhdGgsICJORUVfdHJlYXRtZW50X2dyb3dpbmdfcG9zdF9jb21wb3N0X2NvbmNvcmQiLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHllYXJbMV0gKyAxOTAwLCAiXyIsDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkeWRheVsxXSArIDEsICJfIiwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCR5ZWFyW25yb3coYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSldICsgMTkwMCwgIl8iLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHlkYXlbbnJvdyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhKV0gKyAxLCAiXyIsDQogICAgIk5FRV8iLA0KICAgIFN5cy5EYXRlKCksICIucG5nIg0KICApLA0KICB3aWR0aCA9IDUuNSwNCiAgaGVpZ2h0ID0gNiwNCiAgdW5pdHMgPSAiaW4iLA0KICByZXMgPSAzMDAsDQogIHBvaW50c2l6ZSA9IDExLA0KICBiZyA9ICJ3aGl0ZSINCikNCnBhcihvbWEgPSBjKDQsIDQuNSwgMC41LCAwLjUpLA0KICAgIG1hciA9IGMoMCwgMCwgMC4yNSwgMCkpDQoNCnBhcihmaWcgPSBjKDAsIDEsIDIgLyAzLCAxKSwgbmV3ID0gRkFMU0UpDQpwbG90KA0KICBhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUCwNCiAgYWxsX2RhdGFbWzJdXSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICBwY2ggPSAyMCwNCiAgY2V4ID0gMC43LA0KICBjb2wgPSBjb2wuY29kZTMkY29sWzFdLA0KICBsYXMgPSAxLA0KICB5bGFiID0gIiIsDQogIHhsYWIgPSAiIiwNCiAgeGF4dCA9ICJuIiwNCiAgeGF4cyA9ICJpIiwNCiAgI3lheHQgPSAibiIsDQogIHlsaW0gPSBjKC0yMCwgMjApLA0KICBjZXguYXhpcyA9IDAuOA0KKQ0KDQpwb2ludHMoDQogIGFsbF9kYXRhW1syXV0kVElNRVNUQU1QW2FsbF9kYXRhW1syXV0kdHJlYXRtZW50ID09ICJ0cmVhdG1lbnRfcG9zdF9jb21wb3N0Il0sDQogIGFsbF9kYXRhW1syXV0kTkVFW2FsbF9kYXRhW1syXV0kdHJlYXRtZW50ID09ICJ0cmVhdG1lbnRfcG9zdF9jb21wb3N0Il0sDQogIHBjaCA9IDIwLA0KICBjZXggPSAwLjcsDQogIGNvbCA9IGNvbC5jb2RlMyRjb2xbNF0NCikNCg0KYWJsaW5lKA0KICB2ID0gMjAyMCArIDI5MCAvIDM2NiwNCiAgY29sID0gInJlZCIsDQogIGx3ZCA9IDIsDQogIGx0eSA9IDQNCikNCmFibGluZShoID0gMCwgY29sID0gImJsYWNrIikNCmFibGluZSh2ID0gZGFpbHlfbmVlLnRtcCRkYXRlWzM2Nl0sIGx3ZD0gMS41LCBjb2wgPSAiYmxhY2siKQ0KDQp0ZXh0KA0KICB4ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkWzFdLA0KICB5ID0gMzAsDQogIHBhc3RlMCgiKGEpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOSwNCiAgDQopDQoNCm10ZXh0KA0KICBzaWRlID0gMiwNCiAgdGFyZ2V0LnBsb3QudmFyX25lZS50aXRsZVtbMV1dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQoNCiMjIHBhbmVsIGINCnBhcihmaWcgPSBjKDAsIDEsIDEgLyAzLCAyIC8gMyksIG5ldyA9IFRSVUUpDQpwbG90KA0KICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9tZWFuLA0KICB4bGFiID0gIiIsDQogIHlsYWIgPSAiIiwNCiAgY2V4ID0gMC41LA0KICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICBiZyA9ICJmb3Jlc3RncmVlbiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHBjaCA9IDIxLA0KICB4YXhzID0gImkiLA0KICB5bGltID0gYygtMTAsIDEwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KcG9pbnRzKA0KICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuLA0KICBjZXggPSAwLjUsDQogIGNvbCA9ICJyZWQiLA0KICBiZyA9ICJyZWQiLA0KICBwY2ggPSAyMSwNCikNCg0KYWJsaW5lKA0KICB2ID0gMjAyMCArIDI5MCAvIDM2NiwNCiAgY29sID0gInJlZCIsDQogIGx3ZCA9IDIsDQogIGx0eSA9IDQNCikNCmFibGluZShoID0gMCwgY29sID0gImJsYWNrIikNCmFibGluZSh2ID0gZGFpbHlfbmVlLnRtcCRkYXRlWzM2Nl0sIGx3ZD0gMS41LCBjb2wgPSAiYmxhY2siKQ0KDQp0ZXh0KA0KICB4ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkWzFdLA0KICB5ID0gMzAsDQogIHBhc3RlMCgiKGIpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOQ0KKQ0KDQptdGV4dCgNCiAgc2lkZSA9IDIsDQogIHRhcmdldC5wbG90LnZhcl9uZWUudGl0bGVbWzJdXSwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KDQoNCiMjIHBhbmVsIGMNCnBhcihmaWcgPSBjKDAsIDEsIDAsIDEgLyAzKSwgbmV3ID0gVFJVRSkNCnBsb3QoDQogIGRhaWx5X25lZS50bXAkZGF0ZSwNCiAgZGFpbHlfbmVlLnRtcCRkYWlseV9uZWUsDQogIHR5cGUgPSAibCIsDQogIGx3ZCA9IDEuNSwNCiAgY29sID0gImJsYWNrIiwNCiAgeGxhYiA9ICIiLA0KICB5bGFiID0gIiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHhheHMgPSAiaSIsDQogIHlsaW0gPSBjKC0zNzUsIDM3NSksDQogIGNleC5heGlzID0gMC44DQopDQoNCmxpbmVzKGRhaWx5X25lZS50bXAkZGF0ZSwNCiAgICAgIGRhaWx5X25lZS50bXAkZGFpbHlfZ3BwLA0KICAgICAgbHdkID0gMS41LA0KICAgICAgY29sID0gImZvcmVzdGdyZWVuIiwNCiAgICAgIGx0eSA9IDINCiAgICAgICkNCg0KbGluZXMoZGFpbHlfbmVlLnRtcCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcCRkYWlseV9yZWNvLA0KICAgICAgbHdkID0gMS41LA0KICAgICAgY29sID0gInJlZCIsDQogICAgICBsdHkgPSAzDQogICAgICApDQoNCmFibGluZSgNCiAgdiA9IDIwMjAgKyAyOTAgLyAzNjYsDQogIGNvbCA9ICJyZWQiLA0KICBsd2QgPSAyLA0KICBsdHkgPSA0DQopDQphYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIpDQphYmxpbmUodiA9IGRhaWx5X25lZS50bXAkZGF0ZVszNjZdLCBsd2Q9IDEuNSwgY29sID0gImJsYWNrIikNCg0KYXhpcygNCiAgc2lkZSA9IDEsDQogIGF0ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkW21vbnRoLmxvY10sDQogIGxhYmVscyA9IG1vbnRoLnRpY2tzLA0KICB0Y2sgPSAtLjAyNSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KdGV4dCgNCiAgeCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFsxXSwNCiAgeSA9IDEyMDAsDQogIHBhc3RlMCgiKGMpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOQ0KKQ0KDQptdGV4dCgNCiAgc2lkZSA9IDIsDQogIHRhcmdldC5wbG90LnZhcl9uZWUudGl0bGVbWzNdXSwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KDQpheGlzKA0KICBzaWRlID0gMSwNCiAgYXQgPSBjKDIwMTkuNzUsIDIwMjAuNSwgMjAyMS4xNyksDQogIGxhYmVsID0gYygyMDE5LCAyMDIwLCAyMDIxKSwNCiAgY2V4LmF4aXMgPSAwLjgsDQogIHRjayA9IC0uMDI1LA0KICBsdHkgPSAwLA0KICBidHkgPSAibiIsDQogIGxpbmUgPSAwLjkNCikNCg0KbXRleHQoDQogIHNpZGUgPSAxLA0KICAiTW9udGggLyBZZWFyIiwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KDQoNCmRldi5vZmYoKQ0KYGBgDQoNCg0KDQojIyMjcGFuZWwgMSBoYWxmLWhvdXJseSBub24tZ2FwIGZpbGxlZCBhbmQgaGFsZiBob3VybHkgZ2FwIGZpbGxlZCMjIw0KI3BhbmVsIDIgZGFpbHkgR1BQX3RyZWF0bWVudF9tZWFuIGFuZCBSZXNwaXJhdGlvbiB3aXRoIGVycm9yIGxpbmVzIHNoYWRlZA0KI3BhbmVsIDMgY3VtdWxhdGl2ZSBzdW1zIG9mIE5FRSwgUmVzcGlyYXRpb24gYW5kIG5lZyBHUFAgd2l0aCBlcnJvciBsaW5lcw0KDQoNCiNUcmVhdG1lbnQgc2lkZSBEYWlseQ0KDQoNCg0KYGBge3J9DQoNCg0KDQpjb2wuY29kZTQgPC0gbGlzdChjb2wubmFtZSA9IGMoICJ0cmVhdG1lbnQgKG1vZGVsZWQpIiwidHJlYXRtZW50IChvYnNlcnZlZCkiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIGNvbCA9IGMoImRlZXBza3libHVlIiwgImRlZXBza3libHVlNCIpKQ0KDQpjb2wuY29kZTUgPC0gbGlzdChjb2wubmFtZSA9IGMoIlJlY28iLCAiR1BQIiksDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICBjb2wzID0gYygibGlnaHRjb3JhbCIsICJsaWdodGdyZWVuIikpDQoNCg0KDQoNCiNmaWd1cmUgZm9yIGN1bXVsYXRpdmUgYW5kIGZpbGxlZCBORUUgYW5kIFJlY28NCg0KdGFyZ2V0LnBsb3QudmFyX25lZSA8LSBjKCJORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiR1BQX3RyZWF0bWVudF9tZWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiYmxhbmsiKQ0KDQp0YXJnZXQucGxvdC52YXJfbmVlLnRpdGxlIDwtIGMoDQogIGV4cHJlc3Npb24oRkMgfiAnKCcgfiBtdSB+IG1vbCB+IG0gXiB7LTIgfSB+IHMgXiB7IC0xIH0gfiAnKScpLA0KICBleHByZXNzaW9uKEdQUCB+ICc7JyB+IFJlY29+JygnIH4gbXUgfiBtb2wgfiBtIF4gey0yIH0gfiBkIF4geyAtMSB9IH4gJyknKSwNCiAgZXhwcmVzc2lvbihDdW11bGF0aXZlfnN1bX4gJygnIH4gZyB+IEMgfiBtIF4gey0yIH0gfiAnKScpDQopDQoNCiMjIGxvY2F0ZSB0aGUgc3RhcnQgb2YgZWFjaCBtb250aA0KbW9udGgubG9jIDwtIHdoaWNoKA0KICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCRtZGF5ID09IDEgJg0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJGhvdXIgPT0gMCAmDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkbWluID09IDANCikNCm1vbnRoLnRpY2tzIDwtDQogIHN1YnN0cihzZXEoDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVBbbW9udGgubG9jWzFdXSwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUFttb250aC5sb2NbbGVuZ3RoKG1vbnRoLmxvYyldXSwNCiAgICBieSA9ICJtb250aHMiDQogICksIDYsIDcpDQoNCiMjIGRhaWx5IGF2ZXJhZ2UgdmFsdWVzDQpkYWlseV9uZWUudG1wIDwtDQogIGRhdGEuZnJhbWUoDQogICAgZGF0ZSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZCwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbWluDQogICAgKSwNCiAgICBkYWlseV9uZWUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfdHJlYXRtZW50X21lYW4sDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcCA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4sDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcF9xMDI1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X3EwMjUsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcHE5NzUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfcTk3NSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbzAyNSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xMDI1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvOTc1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X3E5NzUsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApDQogICkNCg0KI0NyZWF0aW5nIGEgc2Vjb25kIGRhaWx5IHZhbHVlIGRhdGEgZnJhbWUgdGhhdCBpcyBub3QgY3VtX3N1bSBmb3IgcGFuZWwgQg0KZGFpbHlfbmVlLnRtcF8yIDwtDQogIGRhdGEuZnJhbWUoDQogICAgZGF0ZSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZCwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbWluDQogICAgKSwNCiAgICBkYWlseV9uZWUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfdHJlYXRtZW50X21lYW4sDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcCA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4sDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcF9xMDI1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X3EwMjUsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcHE5NzUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfcTk3NSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbzAyNSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xMDI1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvOTc1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X3E5NzUsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApDQogICkNCg0KIyMgY29udmVydCBORUUsIFJFQ09fcHJlZGljdF90cmVhdG1lbnRfbWVhbiBncHAgdG8gY3VtdWxhdGl2ZSBzdW0gb2YgY2FyYm9uDQojIGNvbnZlcnQgdG8gY3VtdWxhdGl2ZSBjYXJib24NCmZvcihsbCBpbiAyOjgpIHsNCiAgIyBjb252ZXJ0IHRvIGRhaWx5IHVuaXRzDQogIGRhaWx5X25lZS50bXBbLCBsbF0gPC0NCiAgICBkYWlseV9uZWUudG1wWywgbGxdICogMTIgLyAxMDAwMDAwICogMTgwMCAqIDQ4DQogIGRhaWx5X25lZS50bXBbaXMubmEoZGFpbHlfbmVlLnRtcFssIGxsXSksIGxsXSA8LSAwDQogIA0KICAjIGNhbGN1bGF0ZSBjdW11bGF0aXZlIHN1bSwgaGFyZC1jb2RlZCB3aXRoIGZpcnN0L3NlY29uZCB5ZWFycw0KICBkYWlseV9uZWUudG1wWzE6MzY1LCBsbF0gPC0NCiAgICBjdW1zdW0oZGFpbHlfbmVlLnRtcFsxOjM2NSwgbGxdKQ0KICBkYWlseV9uZWUudG1wWzM2Njpucm93KGRhaWx5X25lZS50bXApLCBsbF0gPC0NCiAgICBjdW1zdW0oZGFpbHlfbmVlLnRtcFszNjY6bnJvdyhkYWlseV9uZWUudG1wKSwgbGxdKQ0KICANCiAgIyBzZXQgYnJlYWsgKG1pc3NpbmcgdmFsdWUpIGJldHdlZW4gdHdvIHllYXJzDQogIGRhaWx5X25lZS50bXBbMzY2LCBsbF0gPC0gTkENCn0NCg0KIyMgYmVnaW4gcGxvdCAgIA0KcG5nKA0KICBwYXN0ZTAob3V0LnBhdGgsICJORUVfdHJlYXRtZW50X0RhaWx5X2dyb3dpbmdfcG9zdF9jb21wb3N0X2NvbmNvcmQiLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHllYXJbMV0gKyAxOTAwLCAiXyIsDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkeWRheVsxXSArIDEsICJfIiwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCR5ZWFyW25yb3coYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSldICsgMTkwMCwgIl8iLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHlkYXlbbnJvdyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhKV0gKyAxLCAiXyIsDQogICAgIk5FRV8iLA0KICAgIFN5cy5EYXRlKCksICIucG5nIg0KICApLA0KICB3aWR0aCA9IDUuNSwNCiAgaGVpZ2h0ID0gNiwNCiAgdW5pdHMgPSAiaW4iLA0KICByZXMgPSAzMDAsDQogIHBvaW50c2l6ZSA9IDExLA0KICBiZyA9ICJ3aGl0ZSINCikNCnBhcihvbWEgPSBjKDQsIDQuNSwgMC41LCAwLjUpLA0KICAgIG1hciA9IGMoMCwgMCwgMC4yNSwgMCkpDQoNCnBhcihmaWcgPSBjKDAsIDEsIDIgLyAzLCAxKSwgbmV3ID0gRkFMU0UpDQpwbG90KA0KICBhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUCwNCiAgYWxsX2RhdGFbWzJdXSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICBwY2ggPSAyMCwNCiAgY2V4ID0gMC43LA0KICBjb2wgPSBjb2wuY29kZTQkY29sWzFdLA0KICBsYXMgPSAxLA0KICB5bGFiID0gIiIsDQogIHhsYWIgPSAiIiwNCiAgeGF4dCA9ICJuIiwNCiAgeGF4cyA9ICJpIiwNCiAgI3lheHQgPSAibiIsDQogIHlsaW0gPSBjKC0xNSwgMTUpLA0KICBjZXguYXhpcyA9IDAuOA0KKQ0KDQpwb2ludHMoDQogIGFsbF9kYXRhW1syXV0kVElNRVNUQU1QW2FsbF9kYXRhW1syXV0kdHJlYXRtZW50ID09ICJ0cmVhdG1lbnRfcG9zdF9jb21wb3N0Il0sDQogIGFsbF9kYXRhW1syXV0kTkVFW2FsbF9kYXRhW1syXV0kdHJlYXRtZW50ID09ICJ0cmVhdG1lbnRfcG9zdF9jb21wb3N0Il0sDQogIHBjaCA9IDIwLA0KICBjZXggPSAwLjcsDQogIGNvbCA9IGNvbC5jb2RlNCRjb2xbMl0NCikNCg0KYWJsaW5lKA0KICB2ID0gMjAyMCArIDI5MCAvIDM2NiwNCiAgY29sID0gInJlZCIsDQogIGx3ZCA9IDIsDQogIGx0eSA9IDQNCikNCmFibGluZShoID0gMCwgY29sID0gImJsYWNrIikNCmFibGluZSh2ID0gZGFpbHlfbmVlLnRtcCRkYXRlWzM2Nl0sIGx3ZD0gMS41LCBjb2wgPSAiYmxhY2siKQ0KDQp0ZXh0KA0KICB4ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkWzFdLA0KICB5ID0gMzAsDQogIHBhc3RlMCgiKGEpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOSwNCiAgDQopDQoNCm10ZXh0KA0KICBzaWRlID0gMiwNCiAgdGFyZ2V0LnBsb3QudmFyX25lZS50aXRsZVtbMV1dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQpsZWdlbmQoDQogICJ0b3BsZWZ0IiwNCiAgZmlsbCA9IGNvbC5jb2RlNCRjb2wsDQogIGJvcmRlciA9IE5BLA0KICBsZWdlbmQgPSBjb2wuY29kZTQkY29sLm5hbWUsDQogIG5jb2wgPSAyLA0KICBjZXggPSAwLjcsDQogIGJ0eSA9ICJuIg0KKQ0KDQojIyBwYW5lbCBiDQpwYXIoZmlnID0gYygwLCAxLCAxIC8gMywgMiAvIDMpLCBuZXcgPSBUUlVFKQ0KcGxvdCgNCiAgZGFpbHlfbmVlLnRtcF8yJGRhdGUsDQogIGRhaWx5X25lZS50bXBfMiRkYWlseV9ncHAsDQogIHhsYWIgPSAiIiwNCiAgeWxhYiA9ICIiLA0KICBjZXggPSAwLA0KICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICBiZyA9ICJmb3Jlc3RncmVlbiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHBjaCA9IDIxLA0KICB4YXhzID0gImkiLA0KICB5bGltID0gYygtMTAsIDEwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCnBvbHlnb24oYyhkYWlseV9uZWUudG1wXzIkZGF0ZSwNCiAgICAgICAgICByZXYoZGFpbHlfbmVlLnRtcF8yJGRhdGUpKSwNCiAgICAgICAgYyhkYWlseV9uZWUudG1wXzIkZGFpbHlfcmVjbzk3NSAsDQogICAgICAgICAgcmV2KGRhaWx5X25lZS50bXBfMiRkYWlseV9yZWNvMDI1KSksDQogICAgICAgIGNvbCA9IGNvbC5jb2RlNSRjb2wzWzFdLA0KICAgICAgICBib3JkZXIgPSBOQSkNCnBvbHlnb24oYyhkYWlseV9uZWUudG1wXzIkZGF0ZSwNCiAgICAgICAgICByZXYoZGFpbHlfbmVlLnRtcF8yJGRhdGUpKSwNCiAgICAgICAgYyhkYWlseV9uZWUudG1wXzIkZGFpbHlfZ3BwcTk3NSAsDQogICAgICAgICAgcmV2KGRhaWx5X25lZS50bXBfMiRkYWlseV9ncHBfcTAyNSkpLA0KICAgICAgICBjb2wgPSBjb2wuY29kZTUkY29sM1syXSwNCiAgICAgICAgYm9yZGVyID0gTkEpDQpwb2ludHMoDQogIGRhaWx5X25lZS50bXBfMiRkYXRlLA0KICBkYWlseV9uZWUudG1wXzIkZGFpbHlfcmVjbywNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAicmVkIiwNCiAgYmcgPSAicmVkIiwNCiAgcGNoID0gMjEsDQopDQoNCnBvaW50cygNCiAgZGFpbHlfbmVlLnRtcF8yJGRhdGUsDQogIGRhaWx5X25lZS50bXBfMiRkYWlseV9ncHAsDQogIGNleCA9IDAuNiwNCiAgY29sID0gImZvcmVzdGdyZWVuIiwNCiAgYmcgPSAiZm9yZXN0Z3JlZW4iLA0KICBwY2ggPSAyMSwNCikNCg0KDQphYmxpbmUoDQogIHYgPSAyMDIwICsgMjkwIC8gMzY2LA0KICBjb2wgPSAicmVkIiwNCiAgbHdkID0gMiwNCiAgbHR5ID0gNA0KKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAiYmxhY2siKQ0KYWJsaW5lKHYgPSBkYWlseV9uZWUudG1wJGRhdGVbMzY2XSwgbHdkPSAxLjUsIGNvbCA9ICJibGFjayIpDQoNCnRleHQoDQogIHggPSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWRbMV0sDQogIHkgPSAzMCwNCiAgcGFzdGUwKCIoYikiKSwNCiAgYWRqID0gYygwLCAxKSwNCiAgY2V4ID0gMC45DQopDQoNCm10ZXh0KA0KICBzaWRlID0gMiwNCiAgdGFyZ2V0LnBsb3QudmFyX25lZS50aXRsZVtbMl1dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQoNCg0KIyMgcGFuZWwgYw0KcGFyKGZpZyA9IGMoMCwgMSwgMCwgMSAvIDMpLCBuZXcgPSBUUlVFKQ0KcGxvdCgNCiAgZGFpbHlfbmVlLnRtcCRkYXRlLA0KICBkYWlseV9uZWUudG1wJGRhaWx5X25lZSwNCiAgdHlwZSA9ICJsIiwNCiAgbHdkID0gMS41LA0KICBjb2wgPSAiYmxhY2siLA0KICB4bGFiID0gIiIsDQogIHlsYWIgPSAiIiwNCiAgeGF4dCA9ICJuIiwNCiAgbGFzID0gMSwNCiAgeGF4cyA9ICJpIiwNCiAgeWxpbSA9IGMoLTYwMCwgODAwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KbGluZXMoZGFpbHlfbmVlLnRtcCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcCRkYWlseV9ncHAsDQogICAgICBsd2QgPSAxLjUsDQogICAgICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICAgICAgbHR5ID0gMQ0KICAgICAgKQ0KDQpsaW5lcyhkYWlseV9uZWUudG1wJGRhdGUsDQogICAgICBkYWlseV9uZWUudG1wJGRhaWx5X3JlY28sDQogICAgICBsd2QgPSAxLjUsDQogICAgICBjb2wgPSAicmVkIiwNCiAgICAgIGx0eSA9IDENCiAgICAgICkNCg0KbGluZXMoZGFpbHlfbmVlLnRtcCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcCRkYWlseV9ncHBfcTAyNSAsDQogICAgICBsd2QgPSAxLA0KICAgICAgY29sID0gImZvcmVzdGdyZWVuIiwNCiAgICAgIGx0eSA9IDMNCiAgICAgICkNCg0KbGluZXMoZGFpbHlfbmVlLnRtcCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcCRkYWlseV9ncHBxOTc1ICAsDQogICAgICBsd2QgPSAxLA0KICAgICAgY29sID0gImZvcmVzdGdyZWVuIiwNCiAgICAgIGx0eSA9IDMNCiAgICAgICkNCg0KbGluZXMoZGFpbHlfbmVlLnRtcCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcCRkYWlseV9yZWNvMDI1LA0KICAgICAgbHdkID0gMSwNCiAgICAgIGNvbCA9ICJyZWQiLA0KICAgICAgbHR5ID0gMw0KICAgICAgKQ0KbGluZXMoZGFpbHlfbmVlLnRtcCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcCRkYWlseV9yZWNvOTc1LA0KICAgICAgbHdkID0gMSwNCiAgICAgIGNvbCA9ICJyZWQiLA0KICAgICAgbHR5ID0gMw0KICAgICAgKQ0KDQphYmxpbmUoDQogIHYgPSAyMDIwICsgMjkwIC8gMzY2LA0KICBjb2wgPSAicmVkIiwNCiAgbHdkID0gMiwNCiAgbHR5ID0gNA0KKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAiYmxhY2siKQ0KYWJsaW5lKHYgPSBkYWlseV9uZWUudG1wJGRhdGVbMzY2XSwgbHdkPSAxLjUsIGNvbCA9ICJibGFjayIpDQoNCmF4aXMoDQogIHNpZGUgPSAxLA0KICBhdCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFttb250aC5sb2NdLA0KICBsYWJlbHMgPSBtb250aC50aWNrcywNCiAgdGNrID0gLS4wMjUsDQogIGNleC5heGlzID0gMC44DQopDQoNCnRleHQoDQogIHggPSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWRbMV0sDQogIHkgPSAxMjAwLA0KICBwYXN0ZTAoIihjKSIpLA0KICBhZGogPSBjKDAsIDEpLA0KICBjZXggPSAwLjkNCikNCg0KbXRleHQoDQogIHNpZGUgPSAyLA0KICB0YXJnZXQucGxvdC52YXJfbmVlLnRpdGxlW1szXV0sDQogIGxpbmUgPSAzLA0KICBvdXRlciA9IEZBTFNFLA0KICBjZXggPSAwLjgNCikNCg0KYXhpcygNCiAgc2lkZSA9IDEsDQogIGF0ID0gYygyMDE5Ljc1LCAyMDIwLjkyLCAyMDIxLjE3KSwNCiAgbGFiZWwgPSBjKDIwMTksIDIwMjAsIDIwMjEpLA0KICBjZXguYXhpcyA9IDAuOCwNCiAgdGNrID0gLS4wMjUsDQogIGx0eSA9IDAsDQogIGJ0eSA9ICJuIiwNCiAgbGluZSA9IDAuOQ0KKQ0KDQptdGV4dCgNCiAgc2lkZSA9IDEsDQogICJNb250aCAvIFllYXIiLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQoNCg0KZGV2Lm9mZigpDQoNCmBgYA0KI0FwcGVuZGl4IGZpZ3VyZSBzaG93aW5nIG9ic2VydmVkIGFuZCBtb2RlbGVkICB0cmVhdG1lbnQgc2lkZSBwb3N0IGNvbXBvc3QgYXBwbGljYXRpb24NCg0KIyMjI3BhbmVsIDEgaGFsZi1ob3VybHkgbm9uLWdhcCBmaWxsZWQgYW5kIGhhbGYgaG91cmx5IGdhcCBmaWxsZWQjIyMNCiNwYW5lbCAyIGRhaWx5IEdQUF90cmVhdG1lbnRfbWVhbiBhbmQgUmVzcGlyYXRpb24gd2l0aCBlcnJvciBsaW5lcyBzaGFkZWQNCg0KDQoNCmBgYHtyfQ0KY29sLmNvZGU0IDwtIGxpc3QoY29sLm5hbWUgPSBjKCAidHJlYXRtZW50IChtb2RlbGVkKSIsInRyZWF0bWVudCAob2JzZXJ2ZWQpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICBjb2wgPSBjKCJkZWVwc2t5Ymx1ZSIsICJkZWVwc2t5Ymx1ZTQiKSkNCg0KY29sLmNvZGU1IDwtIGxpc3QoY29sLm5hbWUgPSBjKCJSZWNvIiwgIkdQUCIpLA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgY29sMyA9IGMoImxpZ2h0Y29yYWwiLCAibGlnaHRncmVlbiIpKQ0KDQoNCg0KDQojZmlndXJlIGZvciBjdW11bGF0aXZlIGFuZCBmaWxsZWQgTkVFIGFuZCBSZWNvDQoNCnRhcmdldC5wbG90LnZhcl9uZWUgPC0gYygiTkVFX2ZpbGxlZF90cmVhdG1lbnRfbWVhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIkdQUF90cmVhdG1lbnRfbWVhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgImJsYW5rIikNCg0KdGFyZ2V0LnBsb3QudmFyX25lZS50aXRsZSA8LSBjKA0KICBleHByZXNzaW9uKEZDIH4gJygnIH4gbXUgfiBtb2wgfiBtIF4gey0yIH0gfiBzIF4geyAtMSB9IH4gJyknKSwNCiAgZXhwcmVzc2lvbihHUFAgfiAnOycgfiBSZWNvficoJyB+IG11IH4gbW9sIH4gbSBeIHstMiB9IH4gZCBeIHsgLTEgfSB+ICcpJyksDQogIGV4cHJlc3Npb24oQ3VtdWxhdGl2ZX5zdW1+ICcoJyB+IGcgfiBDIH4gbSBeIHstMiB9IH4gJyknKQ0KKQ0KDQojIyBsb2NhdGUgdGhlIHN0YXJ0IG9mIGVhY2ggbW9udGgNCm1vbnRoLmxvYyA8LSB3aGljaCgNCiAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkbWRheSA9PSAxICYNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCRob3VyID09IDAgJg0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJG1pbiA9PSAwDQopDQptb250aC50aWNrcyA8LQ0KICBzdWJzdHIoc2VxKA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QW21vbnRoLmxvY1sxXV0sDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVBbbW9udGgubG9jW2xlbmd0aChtb250aC5sb2MpXV0sDQogICAgYnkgPSAibW9udGhzIg0KICApLCA2LCA3KQ0KDQojIyBkYWlseSBhdmVyYWdlIHZhbHVlcw0KZGFpbHlfbmVlLnRtcCA8LQ0KICBkYXRhLmZyYW1lKA0KICAgIGRhdGUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG1pbg0KICAgICksDQogICAgZGFpbHlfbmVlID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHAgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbiwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbyA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHBfcTAyNSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9xMDI1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHBxOTc1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X3E5NzUsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X3JlY28wMjUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfcTAyNSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbzk3NSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xOTc1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKQ0KICApDQoNCiNDcmVhdGluZyBhIHNlY29uZCBkYWlseSB2YWx1ZSBkYXRhIGZyYW1lIHRoYXQgaXMgbm90IGN1bV9zdW0gZm9yIHBhbmVsIEINCmRhaWx5X25lZS50bXBfMiA8LQ0KICBkYXRhLmZyYW1lKA0KICAgIGRhdGUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG1pbg0KICAgICksDQogICAgZGFpbHlfbmVlID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHAgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfbWVhbiwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbyA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHBfcTAyNSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF9xMDI1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHBxOTc1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X3E5NzUsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X3JlY28wMjUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfcTAyNSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbzk3NSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xOTc1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKQ0KICApDQoNCiMjIGNvbnZlcnQgTkVFLCBSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4gZ3BwIHRvIGN1bXVsYXRpdmUgc3VtIG9mIGNhcmJvbg0KIyBjb252ZXJ0IHRvIGN1bXVsYXRpdmUgY2FyYm9uDQpmb3IobGwgaW4gMjo4KSB7DQogICMgY29udmVydCB0byBkYWlseSB1bml0cw0KICBkYWlseV9uZWUudG1wWywgbGxdIDwtDQogICAgZGFpbHlfbmVlLnRtcFssIGxsXSAqIDEyIC8gMTAwMDAwMCAqIDE4MDAgKiA0OA0KICBkYWlseV9uZWUudG1wW2lzLm5hKGRhaWx5X25lZS50bXBbLCBsbF0pLCBsbF0gPC0gMA0KICANCiAgIyBjYWxjdWxhdGUgY3VtdWxhdGl2ZSBzdW0sIGhhcmQtY29kZWQgd2l0aCBmaXJzdC9zZWNvbmQgeWVhcnMNCiAgZGFpbHlfbmVlLnRtcFsxOjM2NSwgbGxdIDwtDQogICAgY3Vtc3VtKGRhaWx5X25lZS50bXBbMTozNjUsIGxsXSkNCiAgZGFpbHlfbmVlLnRtcFszNjY6bnJvdyhkYWlseV9uZWUudG1wKSwgbGxdIDwtDQogICAgY3Vtc3VtKGRhaWx5X25lZS50bXBbMzY2Om5yb3coZGFpbHlfbmVlLnRtcCksIGxsXSkNCiAgDQogICMgc2V0IGJyZWFrIChtaXNzaW5nIHZhbHVlKSBiZXR3ZWVuIHR3byB5ZWFycw0KICBkYWlseV9uZWUudG1wWzM2NiwgbGxdIDwtIE5BDQp9DQoNCiMjIGJlZ2luIHBsb3QgICANCnBuZygNCiAgcGFzdGUwKG91dC5wYXRoLCAiTkVFX3RyZWF0bWVudF9hcHBlbmRpeF9tb2RlbF9vYnNlcnZlZF9kYWlseSIsDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkeWVhclsxXSArIDE5MDAsICJfIiwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCR5ZGF5WzFdICsgMSwgIl8iLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHllYXJbbnJvdyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhKV0gKyAxOTAwLCAiXyIsDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkeWRheVtucm93KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEpXSArIDEsICJfIiwNCiAgICAiTkVFXyIsDQogICAgU3lzLkRhdGUoKSwgIi5wbmciDQogICksDQogIHdpZHRoID0gNS41LA0KICBoZWlnaHQgPSA2LA0KICB1bml0cyA9ICJpbiIsDQogIHJlcyA9IDMwMCwNCiAgcG9pbnRzaXplID0gMTEsDQogIGJnID0gIndoaXRlIg0KKQ0KcGFyKG9tYSA9IGMoNCwgNC41LCAwLjUsIDAuNSksDQogICAgbWFyID0gYygwLCAwLCAwLjI1LCAwKSkNCg0KcGFyKGZpZyA9IGMoMCwgMSwgMSAvMiwgMSksIG5ldyA9IEZBTFNFKQ0KcGxvdCgNCiAgYWxsX2RhdGFbWzJdXSRUSU1FU1RBTVAsDQogIGFsbF9kYXRhW1syXV0kTkVFX2ZpbGxlZF90cmVhdG1lbnRfbWVhbiwNCiAgcGNoID0gMjAsDQogIGNleCA9IDAuNywNCiAgY29sID0gY29sLmNvZGU0JGNvbFsxXSwNCiAgbGFzID0gMSwNCiAgeWxhYiA9ICIiLA0KICB4bGFiID0gIiIsDQogIHhheHQgPSAibiIsDQogIHhheHMgPSAiaSIsDQogICN5YXh0ID0gIm4iLA0KICB5bGltID0gYygtMTUsIDE1KSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KcG9pbnRzKA0KICBhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUFthbGxfZGF0YVtbMl1dJHRyZWF0bWVudCA9PSAidHJlYXRtZW50X3Bvc3RfY29tcG9zdCJdLA0KICBhbGxfZGF0YVtbMl1dJE5FRVthbGxfZGF0YVtbMl1dJHRyZWF0bWVudCA9PSAidHJlYXRtZW50X3Bvc3RfY29tcG9zdCJdLA0KICBwY2ggPSAyMCwNCiAgY2V4ID0gMC43LA0KICBjb2wgPSBjb2wuY29kZTQkY29sWzJdDQopDQoNCmFibGluZSgNCiAgdiA9IDIwMjAgKyAyOTAgLyAzNjYsDQogIGNvbCA9ICJyZWQiLA0KICBsd2QgPSAyLA0KICBsdHkgPSA0DQopDQphYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIpDQphYmxpbmUodiA9IGRhaWx5X25lZS50bXAkZGF0ZVszNjZdLCBsd2Q9IDEuNSwgY29sID0gImJsYWNrIikNCg0KdGV4dCgNCiAgeCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFsxXSwNCiAgeSA9IDMwLA0KICBwYXN0ZTAoIihhKSIpLA0KICBhZGogPSBjKDAsIDEpLA0KICBjZXggPSAwLjksDQogIA0KKQ0KDQoNCg0KI2FkZGluZyBwYW5lbCBsYWJlbA0KbXRleHQoDQogICJBIiwgc2lkZT0yLCBsaW5lPTMsIGF0PTE0LCBsYXMgPSAxDQogICkNCg0KbXRleHQoDQogIHNpZGUgPSAyLA0KICB0YXJnZXQucGxvdC52YXJfbmVlLnRpdGxlW1sxXV0sDQogIGxpbmUgPSAzLA0KICBvdXRlciA9IEZBTFNFLA0KICBjZXggPSAwLjgNCikNCg0KbGVnZW5kKA0KICAidG9wbGVmdCIsDQogIGZpbGwgPSBjb2wuY29kZTQkY29sLA0KICBib3JkZXIgPSBOQSwNCiAgbGVnZW5kID0gY29sLmNvZGU0JGNvbC5uYW1lLA0KICBuY29sID0gMiwNCiAgY2V4ID0gMC43LA0KICBidHkgPSAibiINCikNCg0KIyMgcGFuZWwgYg0KcGFyKGZpZyA9IGMoMCwgMSwgMCwgMSAvIDIpLCBuZXcgPSBUUlVFKQ0KcGxvdCgNCiAgZGFpbHlfbmVlLnRtcF8yJGRhdGUsDQogIGRhaWx5X25lZS50bXBfMiRkYWlseV9ncHAsDQogIHhsYWIgPSAiIiwNCiAgeWxhYiA9ICIiLA0KICBjZXggPSAwLA0KICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICBiZyA9ICJmb3Jlc3RncmVlbiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHBjaCA9IDIxLA0KICB4YXhzID0gImkiLA0KICB5bGltID0gYygtMTAsIDEwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCnBvbHlnb24oYyhkYWlseV9uZWUudG1wXzIkZGF0ZSwNCiAgICAgICAgICByZXYoZGFpbHlfbmVlLnRtcF8yJGRhdGUpKSwNCiAgICAgICAgYyhkYWlseV9uZWUudG1wXzIkZGFpbHlfcmVjbzk3NSAsDQogICAgICAgICAgcmV2KGRhaWx5X25lZS50bXBfMiRkYWlseV9yZWNvMDI1KSksDQogICAgICAgIGNvbCA9IGNvbC5jb2RlNSRjb2wzWzFdLA0KICAgICAgICBib3JkZXIgPSBOQSkNCnBvbHlnb24oYyhkYWlseV9uZWUudG1wXzIkZGF0ZSwNCiAgICAgICAgICByZXYoZGFpbHlfbmVlLnRtcF8yJGRhdGUpKSwNCiAgICAgICAgYyhkYWlseV9uZWUudG1wXzIkZGFpbHlfZ3BwcTk3NSAsDQogICAgICAgICAgcmV2KGRhaWx5X25lZS50bXBfMiRkYWlseV9ncHBfcTAyNSkpLA0KICAgICAgICBjb2wgPSBjb2wuY29kZTUkY29sM1syXSwNCiAgICAgICAgYm9yZGVyID0gTkEpDQpwb2ludHMoDQogIGRhaWx5X25lZS50bXBfMiRkYXRlLA0KICBkYWlseV9uZWUudG1wXzIkZGFpbHlfcmVjbywNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAicmVkIiwNCiAgYmcgPSAicmVkIiwNCiAgcGNoID0gMjEsDQopDQoNCnBvaW50cygNCiAgZGFpbHlfbmVlLnRtcF8yJGRhdGUsDQogIGRhaWx5X25lZS50bXBfMiRkYWlseV9ncHAsDQogIGNleCA9IDAuNiwNCiAgY29sID0gImZvcmVzdGdyZWVuIiwNCiAgYmcgPSAiZm9yZXN0Z3JlZW4iLA0KICBwY2ggPSAyMSwNCikNCg0KDQphYmxpbmUoDQogIHYgPSAyMDIwICsgMjkwIC8gMzY2LA0KICBjb2wgPSAicmVkIiwNCiAgbHdkID0gMiwNCiAgbHR5ID0gNA0KKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAiYmxhY2siKQ0KYWJsaW5lKHYgPSBkYWlseV9uZWUudG1wJGRhdGVbMzY2XSwgbHdkPSAxLjUsIGNvbCA9ICJibGFjayIpDQoNCnRleHQoDQogIHggPSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWRbMV0sDQogIHkgPSAzMCwNCiAgcGFzdGUwKCIoYikiKSwNCiAgYWRqID0gYygwLCAxKSwNCiAgY2V4ID0gMC45DQopDQoNCm10ZXh0KA0KICBzaWRlID0gMiwNCiAgdGFyZ2V0LnBsb3QudmFyX25lZS50aXRsZVtbMl1dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQogIA0KICANCikNCg0KYXhpcygNCiAgc2lkZSA9IDEsDQogIGF0ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkW21vbnRoLmxvY10sDQogIGxhYmVscyA9IG1vbnRoLnRpY2tzLA0KICB0Y2sgPSAtLjAyNSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KdGV4dCgNCiAgeCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFsxXSwNCiAgeSA9IDEyMDAsDQogIHBhc3RlMCgiKGMpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOQ0KKQ0KDQoNCmF4aXMoDQogIHNpZGUgPSAxLA0KICBhdCA9IGMoMjAxOS43NSwgMjAyMC45MiwgMjAyMS4xNyksDQogIGxhYmVsID0gYygyMDE5LCAyMDIwLCAyMDIxKSwNCiAgY2V4LmF4aXMgPSAwLjgsDQogIHRjayA9IC0uMDI1LA0KICBsdHkgPSAwLA0KICBidHkgPSAibiIsDQogIGxpbmUgPSAwLjkNCikNCg0KbXRleHQoDQogIHNpZGUgPSAxLA0KICAiTW9udGggLyBZZWFyIiwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KbXRleHQoDQogICJCIiwgc2lkZT0yLCBsaW5lPTMsIGF0PTksIGxhcyA9IDENCiAgKQ0KDQoNCg0KZGV2Lm9mZigpDQpgYGANCg0KDQojIyMjcGFuZWwgMSBDb250cm9sIGhhbGYtaG91cmx5IG5vbi1nYXAgZmlsbGVkIGFuZCBoYWxmIGhvdXJseSBnYXAgZmlsbGVkIyMjDQojcGFuZWwgMiAxLzIgaG91cmx5IEdQUF9jb250cm9sX21lYW4gYW5kIFJlc3BpcmF0aW9uIHdpdGggZXJyb3IgbGluZXMgc2hhZGVkDQojcGFuZWwgMyBjdW11bGF0aXZlIHN1bXMgb2YgQ29udHJvbCBORUUsIFJlc3BpcmF0aW9uIGFuZCBHUFANCg0KDQojQ29udHJvbCBzaWRlIHNpZGUgd2l0aCAxLzIgaG91cmx5IGRhdGEgaW4gcGFuZWwgMg0KDQoNCg0KYGBge3J9DQoNCg0KI2ZpZ3VyZSBmb3IgY3VtdWxhdGl2ZSBhbmQgZmlsbGVkIE5FRSBhbmQgUmVjbw0KDQp0YXJnZXQucGxvdC52YXJfbmVlX2NvbnQgPC0gYygiTkVFX2ZpbGxlZF9jb250cm9sX21lYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICJHUFBfY29udHJvbF9tZWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiYmxhbmsiKQ0KDQp0YXJnZXQucGxvdC52YXJfbmVlX2NvbnQudGl0bGUgPC0gYygNCiAgZXhwcmVzc2lvbihGQyB+ICcoJyB+IG11IH4gbW9sIH4gbSBeIHstMiB9IH4gcyBeIHsgLTEgfSB+ICcpJyksDQogIGV4cHJlc3Npb24oR1BQIH4gJzsnIH4gUmVjb34nKCcgfiBtdSB+IG1vbCB+IG0gXiB7LTIgfSB+IHMgXiB7IC0xIH0gfiAnKScpLA0KICBleHByZXNzaW9uKEN1bXVsYXRpdmV+c3VtfiAnKCcgfiBnIH4gQyB+IG0gXiB7LTIgfSB+ICcpJykNCikNCg0KIyMgbG9jYXRlIHRoZSBzdGFydCBvZiBlYWNoIG1vbnRoDQptb250aC5sb2MgPC0gd2hpY2goDQogIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJG1kYXkgPT0gMSAmDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkaG91ciA9PSAwICYNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCRtaW4gPT0gMA0KKQ0KbW9udGgudGlja3MgPC0NCiAgc3Vic3RyKHNlcSgNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUFttb250aC5sb2NbMV1dLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QW21vbnRoLmxvY1tsZW5ndGgobW9udGgubG9jKV1dLA0KICAgIGJ5ID0gIm1vbnRocyINCiAgKSwgNiwgNykNCg0KIyMgZGFpbHkgYXZlcmFnZSB2YWx1ZXMNCmRhaWx5X25lZS50bXBfY29udCA8LQ0KICBkYXRhLmZyYW1lKA0KICAgIGRhdGUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG1pbg0KICAgICksDQogICAgZGFpbHlfbmVlID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX2NvbnRyb2xfbWVhbiwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfZ3BwID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKQ0KICApDQoNCiMjIGNvbnZlcnQgTkVFLCBSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4gZ3BwIHRvIGN1bXVsYXRpdmUgc3VtIG9mIGNhcmJvbg0KIyBjb252ZXJ0IHRvIGN1bXVsYXRpdmUgY2FyYm9uDQpmb3IobGwgaW4gMjo0KSB7DQogICMgY29udmVydCB0byBkYWlseSB1bml0cw0KICBkYWlseV9uZWUudG1wX2NvbnRbLCBsbF0gPC0NCiAgICBkYWlseV9uZWUudG1wX2NvbnRbLCBsbF0gKiAxMiAvIDEwMDAwMDAgKiAxODAwICogNDgNCiAgZGFpbHlfbmVlLnRtcF9jb250W2lzLm5hKGRhaWx5X25lZS50bXBfY29udFssIGxsXSksIGxsXSA8LSAwDQogIA0KICAjIGNhbGN1bGF0ZSBjdW11bGF0aXZlIHN1bSwgaGFyZC1jb2RlZCB3aXRoIGZpcnN0L3NlY29uZCB5ZWFycw0KICBkYWlseV9uZWUudG1wX2NvbnRbMTozNjUsIGxsXSA8LQ0KICAgIGN1bXN1bShkYWlseV9uZWUudG1wX2NvbnRbMTozNjUsIGxsXSkNCiAgZGFpbHlfbmVlLnRtcF9jb250WzM2Njpucm93KGRhaWx5X25lZS50bXBfY29udCksIGxsXSA8LQ0KICAgIGN1bXN1bShkYWlseV9uZWUudG1wX2NvbnRbMzY2Om5yb3coZGFpbHlfbmVlLnRtcF9jb250KSwgbGxdKQ0KICANCiAgIyBzZXQgYnJlYWsgKG1pc3NpbmcgdmFsdWUpIGJldHdlZW4gdHdvIHllYXJzDQogIGRhaWx5X25lZS50bXBfY29udFszNjYsIGxsXSA8LSBOQQ0KfQ0KDQojIyBiZWdpbiBwbG90ICAgDQpwbmcoDQogIHBhc3RlMChvdXQucGF0aCwgIk5FRV9DT05UUk9MX2dyb3dpbmdfcG9zdF9jb21wb3N0X2NvbmNvcmQiLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHllYXJbMV0gKyAxOTAwLCAiXyIsDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkeWRheVsxXSArIDEsICJfIiwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCR5ZWFyW25yb3coYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSldICsgMTkwMCwgIl8iLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHlkYXlbbnJvdyhhbGxfZGF0YSRhbGxfcG9zdF9kYXRhKV0gKyAxLCAiXyIsDQogICAgIk5FRV8iLA0KICAgIFN5cy5EYXRlKCksICIucG5nIg0KICApLA0KICB3aWR0aCA9IDUuNSwNCiAgaGVpZ2h0ID0gNiwNCiAgdW5pdHMgPSAiaW4iLA0KICByZXMgPSAzMDAsDQogIHBvaW50c2l6ZSA9IDExLA0KICBiZyA9ICJ3aGl0ZSINCikNCnBhcihvbWEgPSBjKDQsIDQuNSwgMC41LCAwLjUpLA0KICAgIG1hciA9IGMoMCwgMCwgMC4yNSwgMCkpDQoNCnBhcihmaWcgPSBjKDAsIDEsIDIgLyAzLCAxKSwgbmV3ID0gRkFMU0UpDQpwbG90KA0KICBhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUCwNCiAgYWxsX2RhdGFbWzJdXSRORUVfZmlsbGVkX2NvbnRyb2xfbWVhbiwNCiAgcGNoID0gMjAsDQogIGNleCA9IDAuNywNCiAgY29sID0gY29sLmNvZGU0JGNvbFsxXSwNCiAgbGFzID0gMSwNCiAgeWxhYiA9ICIiLA0KICB4bGFiID0gIiIsDQogIHhheHQgPSAibiIsDQogIHhheHMgPSAiaSIsDQogICN5YXh0ID0gIm4iLA0KICB5bGltID0gYygtMjAsIDIwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KcG9pbnRzKA0KICBhbGxfZGF0YVtbMl1dJFRJTUVTVEFNUFthbGxfZGF0YVtbMl1dJHRyZWF0bWVudCA9PSAiY29udHJvbF9wb3N0X2NvbXBvc3QiXSwNCiAgYWxsX2RhdGFbWzJdXSRORUVbYWxsX2RhdGFbWzJdXSR0cmVhdG1lbnQgPT0gImNvbnRyb2xfcG9zdF9jb21wb3N0Il0sDQogIHBjaCA9IDIwLA0KICBjZXggPSAwLjcsDQogIGNvbCA9IGNvbC5jb2RlNCRjb2xbNF0NCikNCg0KYWJsaW5lKA0KICB2ID0gMjAyMCArIDI5MCAvIDM2NiwNCiAgY29sID0gInJlZCIsDQogIGx3ZCA9IDIsDQogIGx0eSA9IDQNCikNCmFibGluZShoID0gMCwgY29sID0gImJsYWNrIikNCmFibGluZSh2ID0gZGFpbHlfbmVlLnRtcF9jb250JGRhdGVbMzY2XSwgbHdkPSAxLjUsIGNvbCA9ICJibGFjayIpDQoNCnRleHQoDQogIHggPSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWRbMV0sDQogIHkgPSAzMCwNCiAgcGFzdGUwKCIoYSkiKSwNCiAgYWRqID0gYygwLCAxKSwNCiAgY2V4ID0gMC45DQopDQoNCm10ZXh0KA0KICBzaWRlID0gMiwNCiAgdGFyZ2V0LnBsb3QudmFyX25lZV9jb250LnRpdGxlW1sxXV0sDQogIGxpbmUgPSAzLA0KICBvdXRlciA9IEZBTFNFLA0KICBjZXggPSAwLjgNCikNCg0KIyMgcGFuZWwgYg0KcGFyKGZpZyA9IGMoMCwgMSwgMSAvIDMsIDIgLyAzKSwgbmV3ID0gVFJVRSkNCnBsb3QoDQogIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZCwNCiAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9tZWFuLA0KICB4bGFiID0gIiIsDQogIHlsYWIgPSAiIiwNCiAgY2V4ID0gMC41LA0KICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICBiZyA9ICJmb3Jlc3RncmVlbiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHBjaCA9IDIxLA0KICB4YXhzID0gImkiLA0KICB5bGltID0gYygtMTAsIDEwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KcG9pbnRzKA0KICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiwNCiAgY2V4ID0gMC41LA0KICBjb2wgPSAicmVkIiwNCiAgYmcgPSAicmVkIiwNCiAgcGNoID0gMjEsDQopDQoNCmFibGluZSgNCiAgdiA9IDIwMjAgKyAyOTAgLyAzNjYsDQogIGNvbCA9ICJyZWQiLA0KICBsd2QgPSAyLA0KICBsdHkgPSA0DQopDQphYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIpDQphYmxpbmUodiA9IGRhaWx5X25lZS50bXBfY29udCRkYXRlWzM2Nl0sIGx3ZD0gMS41LCBjb2wgPSAiYmxhY2siKQ0KDQp0ZXh0KA0KICB4ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkWzFdLA0KICB5ID0gMzAsDQogIHBhc3RlMCgiKGIpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOQ0KKQ0KDQptdGV4dCgNCiAgc2lkZSA9IDIsDQogIHRhcmdldC5wbG90LnZhcl9uZWVfY29udC50aXRsZVtbMl1dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQoNCg0KIyMgcGFuZWwgYw0KcGFyKGZpZyA9IGMoMCwgMSwgMCwgMSAvIDMpLCBuZXcgPSBUUlVFKQ0KcGxvdCgNCiAgZGFpbHlfbmVlLnRtcF9jb250JGRhdGUsDQogIGRhaWx5X25lZS50bXBfY29udCRkYWlseV9uZWUsDQogIHR5cGUgPSAibCIsDQogIGx3ZCA9IDEuNSwNCiAgY29sID0gImJsYWNrIiwNCiAgeGxhYiA9ICIiLA0KICB5bGFiID0gIiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHhheHMgPSAiaSIsDQogIHlsaW0gPSBjKC0zNzUsIDM3NSksDQogIGNleC5heGlzID0gMC44DQopDQoNCmxpbmVzKGRhaWx5X25lZS50bXBfY29udCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcF9jb250JGRhaWx5X2dwcCwNCiAgICAgIGx3ZCA9IDEuNSwNCiAgICAgIGNvbCA9ICJmb3Jlc3RncmVlbiIsDQogICAgICBsdHkgPSAyDQogICAgICApDQoNCmxpbmVzKGRhaWx5X25lZS50bXBfY29udCRkYXRlLA0KICAgICAgZGFpbHlfbmVlLnRtcF9jb250JGRhaWx5X3JlY28sDQogICAgICBsd2QgPSAxLjUsDQogICAgICBjb2wgPSAicmVkIiwNCiAgICAgIGx0eSA9IDMNCiAgICAgICkNCg0KYWJsaW5lKA0KICB2ID0gMjAyMCArIDI5MCAvIDM2NiwNCiAgY29sID0gInJlZCIsDQogIGx3ZCA9IDIsDQogIGx0eSA9IDQNCikNCmFibGluZShoID0gMCwgY29sID0gImJsYWNrIikNCmFibGluZSh2ID0gZGFpbHlfbmVlLnRtcF9jb250JGRhdGVbMzY2XSwgbHdkPSAxLjUsIGNvbCA9ICJibGFjayIpDQoNCmF4aXMoDQogIHNpZGUgPSAxLA0KICBhdCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFttb250aC5sb2NdLA0KICBsYWJlbHMgPSBtb250aC50aWNrcywNCiAgdGNrID0gLS4wMjUsDQogIGNleC5heGlzID0gMC44DQopDQoNCnRleHQoDQogIHggPSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWRbMV0sDQogIHkgPSAxMjAwLA0KICBwYXN0ZTAoIihjKSIpLA0KICBhZGogPSBjKDAsIDEpLA0KICBjZXggPSAwLjkNCikNCg0KbXRleHQoDQogIHNpZGUgPSAyLA0KICB0YXJnZXQucGxvdC52YXJfbmVlX2NvbnQudGl0bGVbWzNdXSwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KDQpheGlzKA0KICBzaWRlID0gMSwNCiAgYXQgPSBjKDIwMTkuNzUsIDIwMjAuNSwgMjAyMS4xNyksDQogIGxhYmVsID0gYygyMDE5LCAyMDIwLCAyMDIxKSwNCiAgY2V4LmF4aXMgPSAwLjgsDQogIHRjayA9IC0uMDI1LA0KICBsdHkgPSAwLA0KICBidHkgPSAibiIsDQogIGxpbmUgPSAwLjkNCikNCg0KbXRleHQoDQogIHNpZGUgPSAxLA0KICAiTW9udGggLyBZZWFyIiwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KDQoNCmRldi5vZmYoKQ0KYGBgDQoNCg0KIyMjI3BhbmVsIDEgQ29udHJvbCBoYWxmLWhvdXJseSBub24tZ2FwIGZpbGxlZCBhbmQgaGFsZiBob3VybHkgZ2FwIGZpbGxlZCMjIw0KI3BhbmVsIDIgZGFpbHkgR1BQX2NvbnRyb2xfbWVhbiBhbmQgUmVzcGlyYXRpb24gd2l0aCBlcnJvciBsaW5lcyBzaGFkZWQNCiNwYW5lbCAzIGN1bXVsYXRpdmUgc3VtcyBvZiBDb250cm9sIE5FRSwgUmVzcGlyYXRpb24gYW5kIG5lZyBHUFAgd2l0aCBlcnJvciBsaW5lcw0KDQojY29udHJvbCBzaWRlIGRhaWx5IGRhdGEgaW4gcGFuZWwgMg0KYGBge3J9DQogY29sLmNvZGU2IDwtIGxpc3QoY29sLm5hbWUgPSBjKCAiY29udHJvbCAobW9kZWxlZCkiLCJjb250cm9sIChvYnNlcnZlZCkiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIGNvbCA9IGMoImZpcmVicmljazEiLCAiZmlyZWJyaWNrNCIpKQ0KDQoNCg0KDQoNCiNmaWd1cmUgZm9yIGN1bXVsYXRpdmUgYW5kIGZpbGxlZCBORUUgYW5kIFJlY28NCg0KdGFyZ2V0LnBsb3QudmFyX25lZV9jb250cm9sX2RhaWx5IDwtIGMoIk5FRV9maWxsZWRfY29udHJvbF9tZWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiR1BQX2NvbnRyb2xfbWVhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgImJsYW5rIikNCg0KdGFyZ2V0LnBsb3QudmFyX25lZV9jb250cm9sX2RhaWx5LnRpdGxlIDwtIGMoDQogIGV4cHJlc3Npb24oRkMgfiAnKCcgfiBtdSB+IG1vbCB+IG0gXiB7LTIgfSB+IHMgXiB7IC0xIH0gfiAnKScpLA0KICBleHByZXNzaW9uKEdQUCB+ICc7JyB+IFJlY29+JygnIH4gbXUgfiBtb2wgfiBtIF4gey0yIH0gfiBkIF4geyAtMSB9IH4gJyknKSwNCiAgZXhwcmVzc2lvbihDdW11bGF0aXZlfnN1bX4gJygnIH4gZyB+IEMgfiBtIF4gey0yIH0gfiAnKScpDQopDQoNCiMjIGxvY2F0ZSB0aGUgc3RhcnQgb2YgZWFjaCBtb250aA0KbW9udGgubG9jIDwtIHdoaWNoKA0KICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCRtZGF5ID09IDEgJg0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJGhvdXIgPT0gMCAmDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkbWluID09IDANCikNCm1vbnRoLnRpY2tzIDwtDQogIHN1YnN0cihzZXEoDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVBbbW9udGgubG9jWzFdXSwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUFttb250aC5sb2NbbGVuZ3RoKG1vbnRoLmxvYyldXSwNCiAgICBieSA9ICJtb250aHMiDQogICksIDYsIDcpDQoNCiMjIGRhaWx5IGF2ZXJhZ2UgdmFsdWVzDQpkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlIDwtDQogIGRhdGEuZnJhbWUoDQogICAgZGF0ZSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZCwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbWluDQogICAgKSwNCiAgICBkYWlseV9uZWUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJE5FRV9maWxsZWRfY29udHJvbF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHAgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX21lYW4sDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X3JlY28gPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF9jb250cm9sX21lYW4sDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG5hLm1lYW4NCiAgICApLA0KICAgIGRhaWx5X2dwcF9xMDI1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9xMDI1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHBxOTc1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9xOTc1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvMDI1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9xMDI1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvOTc1ID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9xOTc1LA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKQ0KICApDQoNCiNDcmVhdGluZyBhIHNlY29uZCBkYWlseSB2YWx1ZSBkYXRhIGZyYW1lIHRoYXQgaXMgbm90IGN1bV9zdW0gZm9yIHBhbmVsIEINCmRhaWx5X25lZS50bXBfY29udHJvbHNpZGVfMiA8LQ0KICBkYXRhLmZyYW1lKA0KICAgIGRhdGUgPSB0YXBwbHkoDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWQsDQogICAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciwNCiAgICAgIG1pbg0KICAgICksDQogICAgZGFpbHlfbmVlID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX2NvbnRyb2xfbWVhbiwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfZ3BwID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfY29udHJvbF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9yZWNvID0gdGFwcGx5KA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9tZWFuLA0KICAgICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIsDQogICAgICBuYS5tZWFuDQogICAgKSwNCiAgICBkYWlseV9ncHBfcTAyNSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfcTAyNSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfZ3BwcTk3NSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfcTk3NSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbzAyNSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTAyNSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICksDQogICAgZGFpbHlfcmVjbzk3NSA9IHRhcHBseSgNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTk3NSwNCiAgICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyLA0KICAgICAgbmEubWVhbg0KICAgICkNCiAgKQ0KDQojIyBjb252ZXJ0IE5FRSwgUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiBncHAgdG8gY3VtdWxhdGl2ZSBzdW0gb2YgY2FyYm9uDQojIGNvbnZlcnQgdG8gY3VtdWxhdGl2ZSBjYXJib24NCmZvcihsbCBpbiAyOjgpIHsNCiAgIyBjb252ZXJ0IHRvIGRhaWx5IHVuaXRzDQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVbLCBsbF0gPC0NCiAgICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlWywgbGxdICogMTIgLyAxMDAwMDAwICogMTgwMCAqIDQ4DQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVbaXMubmEoZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZVssIGxsXSksIGxsXSA8LSAwDQogIA0KICAjIGNhbGN1bGF0ZSBjdW11bGF0aXZlIHN1bSwgaGFyZC1jb2RlZCB3aXRoIGZpcnN0L3NlY29uZCB5ZWFycw0KICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlWzE6MzY1LCBsbF0gPC0NCiAgICBjdW1zdW0oZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZVsxOjM2NSwgbGxdKQ0KICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlWzM2Njpucm93KGRhaWx5X25lZS50bXBfY29udHJvbHNpZGUpLCBsbF0gPC0NCiAgICBjdW1zdW0oZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZVszNjY6bnJvdyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlKSwgbGxdKQ0KICANCiAgIyBzZXQgYnJlYWsgKG1pc3NpbmcgdmFsdWUpIGJldHdlZW4gdHdvIHllYXJzDQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVbMzY2LCBsbF0gPC0gTkENCn0NCg0KIyMgYmVnaW4gcGxvdCAgIA0KcG5nKA0KICBwYXN0ZTAob3V0LnBhdGgsICJORUVfY29udHJvbF9EYWlseV9ncm93aW5nX3Bvc3RfY29tcG9zdF9jb25jb3JkIiwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCR5ZWFyWzFdICsgMTkwMCwgIl8iLA0KICAgIGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkVElNRVNUQU1QJHlkYXlbMV0gKyAxLCAiXyIsDQogICAgYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRUSU1FU1RBTVAkeWVhcltucm93KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEpXSArIDE5MDAsICJfIiwNCiAgICBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFRJTUVTVEFNUCR5ZGF5W25yb3coYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSldICsgMSwgIl8iLA0KICAgICJORUVfIiwNCiAgICBTeXMuRGF0ZSgpLCAiLnBuZyINCiAgKSwNCiAgd2lkdGggPSA1LjUsDQogIGhlaWdodCA9IDYsDQogIHVuaXRzID0gImluIiwNCiAgcmVzID0gMzAwLA0KICBwb2ludHNpemUgPSAxMSwNCiAgYmcgPSAid2hpdGUiDQopDQpwYXIob21hID0gYyg0LCA0LjUsIDAuNSwgMC41KSwNCiAgICBtYXIgPSBjKDAsIDAsIDAuMjUsIDApKQ0KDQpwYXIoZmlnID0gYygwLCAxLCAyIC8gMywgMSksIG5ldyA9IEZBTFNFKQ0KcGxvdCgNCiAgYWxsX2RhdGFbWzJdXSRUSU1FU1RBTVAsDQogIGFsbF9kYXRhW1syXV0kTkVFX2ZpbGxlZF9jb250cm9sX21lYW4sDQogIHBjaCA9IDIwLA0KICBjZXggPSAwLjcsDQogIGNvbCA9IGNvbC5jb2RlNiRjb2xbMV0sDQogIGxhcyA9IDEsDQogIHlsYWIgPSAiIiwNCiAgeGxhYiA9ICIiLA0KICB4YXh0ID0gIm4iLA0KICB4YXhzID0gImkiLA0KICAjeWF4dCA9ICJuIiwNCiAgeWxpbSA9IGMoLTE1LCAxNSksDQogIGNleC5heGlzID0gMC44DQopDQoNCnBvaW50cygNCiAgYWxsX2RhdGFbWzJdXSRUSU1FU1RBTVBbYWxsX2RhdGFbWzJdXSR0cmVhdG1lbnQgPT0gImNvbnRyb2xfcG9zdF9jb21wb3N0Il0sDQogIGFsbF9kYXRhW1syXV0kTkVFW2FsbF9kYXRhW1syXV0kdHJlYXRtZW50ID09ICJjb250cm9sX3Bvc3RfY29tcG9zdCJdLA0KICBwY2ggPSAyMCwNCiAgY2V4ID0gMC43LA0KICBjb2wgPSBjb2wuY29kZTYkY29sWzJdDQopDQoNCmFibGluZSgNCiAgdiA9IDIwMjAgKyAyOTAgLyAzNjYsDQogIGNvbCA9ICJyZWQiLA0KICBsd2QgPSAyLA0KICBsdHkgPSA0DQopDQphYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIpDQphYmxpbmUodiA9IGRhaWx5X25lZS50bXBfY29udHJvbHNpZGUkZGF0ZVszNjZdLCBsd2Q9IDEuNSwgY29sID0gImJsYWNrIikNCg0KdGV4dCgNCiAgeCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFsxXSwNCiAgeSA9IDMwLA0KICBwYXN0ZTAoIihhKSIpLA0KICBhZGogPSBjKDAsIDEpLA0KICBjZXggPSAwLjksDQogIA0KKQ0KDQptdGV4dCgNCiAgc2lkZSA9IDIsDQogIHRhcmdldC5wbG90LnZhcl9uZWVfY29udHJvbF9kYWlseS50aXRsZVtbMV1dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQpsZWdlbmQoDQogICJ0b3BsZWZ0IiwNCiAgZmlsbCA9IGNvbC5jb2RlNiRjb2wsDQogIGJvcmRlciA9IE5BLA0KICBsZWdlbmQgPSBjb2wuY29kZTYkY29sLm5hbWUsDQogIG5jb2wgPSAyLA0KICBjZXggPSAwLjcsDQogIGJ0eSA9ICJuIg0KKQ0KDQojIyBwYW5lbCBiDQpwYXIoZmlnID0gYygwLCAxLCAxIC8gMywgMiAvIDMpLCBuZXcgPSBUUlVFKQ0KcGxvdCgNCiAgZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZV8yJGRhdGUsDQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVfMiRkYWlseV9ncHAsDQogIHhsYWIgPSAiIiwNCiAgeWxhYiA9ICIiLA0KICBjZXggPSAwLA0KICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICBiZyA9ICJmb3Jlc3RncmVlbiIsDQogIHhheHQgPSAibiIsDQogIGxhcyA9IDEsDQogIHBjaCA9IDIxLA0KICB4YXhzID0gImkiLA0KICB5bGltID0gYygtMTAsIDEwKSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCnBvbHlnb24oYyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlXzIkZGF0ZSwNCiAgICAgICAgICByZXYoZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZV8yJGRhdGUpKSwNCiAgICAgICAgYyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlXzIkZGFpbHlfcmVjbzk3NSAsDQogICAgICAgICAgcmV2KGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVfMiRkYWlseV9yZWNvMDI1KSksDQogICAgICAgIGNvbCA9IGNvbC5jb2RlNSRjb2wzWzFdLA0KICAgICAgICBib3JkZXIgPSBOQSkNCnBvbHlnb24oYyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlXzIkZGF0ZSwNCiAgICAgICAgICByZXYoZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZV8yJGRhdGUpKSwNCiAgICAgICAgYyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlXzIkZGFpbHlfZ3BwcTk3NSAsDQogICAgICAgICAgcmV2KGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVfMiRkYWlseV9ncHBfcTAyNSkpLA0KICAgICAgICBjb2wgPSBjb2wuY29kZTUkY29sM1syXSwNCiAgICAgICAgYm9yZGVyID0gTkEpDQpwb2ludHMoDQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVfMiRkYXRlLA0KICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlXzIkZGFpbHlfcmVjbywNCiAgY2V4ID0gMC42LA0KICBjb2wgPSAicmVkIiwNCiAgYmcgPSAicmVkIiwNCiAgcGNoID0gMjEsDQopDQoNCnBvaW50cygNCiAgZGFpbHlfbmVlLnRtcF9jb250cm9sc2lkZV8yJGRhdGUsDQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGVfMiRkYWlseV9ncHAsDQogIGNleCA9IDAuNiwNCiAgY29sID0gImZvcmVzdGdyZWVuIiwNCiAgYmcgPSAiZm9yZXN0Z3JlZW4iLA0KICBwY2ggPSAyMSwNCikNCg0KDQphYmxpbmUoDQogIHYgPSAyMDIwICsgMjkwIC8gMzY2LA0KICBjb2wgPSAicmVkIiwNCiAgbHdkID0gMiwNCiAgbHR5ID0gNA0KKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAiYmxhY2siKQ0KYWJsaW5lKHYgPSBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGVbMzY2XSwgbHdkPSAxLjUsIGNvbCA9ICJibGFjayIpDQoNCnRleHQoDQogIHggPSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJHRpbWUuaWRbMV0sDQogIHkgPSAzMCwNCiAgcGFzdGUwKCIoYikiKSwNCiAgYWRqID0gYygwLCAxKSwNCiAgY2V4ID0gMC45DQopDQoNCm10ZXh0KA0KICBzaWRlID0gMiwNCiAgdGFyZ2V0LnBsb3QudmFyX25lZV9jb250cm9sX2RhaWx5LnRpdGxlW1syXV0sDQogIGxpbmUgPSAzLA0KICBvdXRlciA9IEZBTFNFLA0KICBjZXggPSAwLjgNCikNCg0KDQojIyBwYW5lbCBjDQpwYXIoZmlnID0gYygwLCAxLCAwLCAxIC8gMyksIG5ldyA9IFRSVUUpDQpwbG90KA0KICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGUsDQogIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGUkZGFpbHlfbmVlLA0KICB0eXBlID0gImwiLA0KICBsd2QgPSAxLjUsDQogIGNvbCA9ICJibGFjayIsDQogIHhsYWIgPSAiIiwNCiAgeWxhYiA9ICIiLA0KICB4YXh0ID0gIm4iLA0KICBsYXMgPSAxLA0KICB4YXhzID0gImkiLA0KICB5bGltID0gYygtNjAwLCA4MDApLA0KICBjZXguYXhpcyA9IDAuOA0KKQ0KDQpsaW5lcyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGUsDQogICAgICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhaWx5X2dwcCwNCiAgICAgIGx3ZCA9IDEuNSwNCiAgICAgIGNvbCA9ICJmb3Jlc3RncmVlbiIsDQogICAgICBsdHkgPSAxDQogICAgICApDQoNCmxpbmVzKGRhaWx5X25lZS50bXBfY29udHJvbHNpZGUkZGF0ZSwNCiAgICAgIGRhaWx5X25lZS50bXBfY29udHJvbHNpZGUkZGFpbHlfcmVjbywNCiAgICAgIGx3ZCA9IDEuNSwNCiAgICAgIGNvbCA9ICJyZWQiLA0KICAgICAgbHR5ID0gMQ0KICAgICAgKQ0KDQpsaW5lcyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGUsDQogICAgICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhaWx5X2dwcF9xMDI1ICwNCiAgICAgIGx3ZCA9IDEsDQogICAgICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICAgICAgbHR5ID0gMw0KICAgICAgKQ0KDQpsaW5lcyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGUsDQogICAgICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhaWx5X2dwcHE5NzUgICwNCiAgICAgIGx3ZCA9IDEsDQogICAgICBjb2wgPSAiZm9yZXN0Z3JlZW4iLA0KICAgICAgbHR5ID0gMw0KICAgICAgKQ0KDQpsaW5lcyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGUsDQogICAgICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhaWx5X3JlY28wMjUsDQogICAgICBsd2QgPSAxLA0KICAgICAgY29sID0gInJlZCIsDQogICAgICBsdHkgPSAzDQogICAgICApDQpsaW5lcyhkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhdGUsDQogICAgICBkYWlseV9uZWUudG1wX2NvbnRyb2xzaWRlJGRhaWx5X3JlY285NzUsDQogICAgICBsd2QgPSAxLA0KICAgICAgY29sID0gInJlZCIsDQogICAgICBsdHkgPSAzDQogICAgICApDQoNCmFibGluZSgNCiAgdiA9IDIwMjAgKyAyOTAgLyAzNjYsDQogIGNvbCA9ICJyZWQiLA0KICBsd2QgPSAyLA0KICBsdHkgPSA0DQopDQphYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIpDQphYmxpbmUodiA9IGRhaWx5X25lZS50bXBfY29udHJvbHNpZGUkZGF0ZVszNjZdLCBsd2Q9IDEuNSwgY29sID0gImJsYWNrIikNCg0KYXhpcygNCiAgc2lkZSA9IDEsDQogIGF0ID0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSR0aW1lLmlkW21vbnRoLmxvY10sDQogIGxhYmVscyA9IG1vbnRoLnRpY2tzLA0KICB0Y2sgPSAtLjAyNSwNCiAgY2V4LmF4aXMgPSAwLjgNCikNCg0KdGV4dCgNCiAgeCA9IGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkdGltZS5pZFsxXSwNCiAgeSA9IDEyMDAsDQogIHBhc3RlMCgiKGMpIiksDQogIGFkaiA9IGMoMCwgMSksDQogIGNleCA9IDAuOQ0KKQ0KDQptdGV4dCgNCiAgc2lkZSA9IDIsDQogIHRhcmdldC5wbG90LnZhcl9uZWVfY29udHJvbF9kYWlseS50aXRsZVtbM11dLA0KICBsaW5lID0gMywNCiAgb3V0ZXIgPSBGQUxTRSwNCiAgY2V4ID0gMC44DQopDQoNCmF4aXMoDQogIHNpZGUgPSAxLA0KICBhdCA9IGMoMjAxOS43NSwgMjAyMC45MiwgMjAyMS4xNyksDQogIGxhYmVsID0gYygyMDE5LCAyMDIwLCAyMDIxKSwNCiAgY2V4LmF4aXMgPSAwLjgsDQogIHRjayA9IC0uMDI1LA0KICBsdHkgPSAwLA0KICBidHkgPSAibiIsDQogIGxpbmUgPSAwLjkNCikNCg0KbXRleHQoDQogIHNpZGUgPSAxLA0KICAiTW9udGggLyBZZWFyIiwNCiAgbGluZSA9IDMsDQogIG91dGVyID0gRkFMU0UsDQogIGNleCA9IDAuOA0KKQ0KDQoNCmRldi5vZmYoKQ0KYGBgDQoNCiNDdW1sYXRpdmUgc3VtIFJlY28gY29udHJvbCBzaWRlIHByZSBjb21wb3N0IGFwcGxpY2F0aW9uIHdpdGggQ0kncw0KDQpgYGB7cn0NCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fcHJlZGljdF9jb250cm9sX21lYW4sDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3ByZWRpY3RfY29udHJvbF9xMDI1LA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQoNCg0KY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTk3NSAsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KYGBgDQojQ3VtbGF0aXZlIHN1bSBHUFAgY29udHJvbCBzaWRlIHByZSBjb21wb3N0IGFwcGxpY2F0aW9uIHdpdGggQ0kncw0KDQpgYGB7cn0NCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJEdQUF9jb250cm9sX21lYW4gLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQoNCg0KY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX2NvbnRyb2xfcTAyNSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KDQoNCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJEdQUF9jb250cm9sX3E5NzUgLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQpgYGANCg0KDQojQ3VtbGF0aXZlIHN1bSBSZWNvIGNvbnRyb2wgc2lkZSBwb3N0IGNvbXBvc3QgYXBwbGljYXRpb24gd2l0aCBDSSdzDQpgYGB7cn0NCg0KI1JlY28gQ3Vtc3VtDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfbWVhbiwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KI2xvd2VyIGJvdW5kIENJDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTAyNSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KI3VwcGVyIGJvdW5kIENJDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X2NvbnRyb2xfcTk3NSAsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQpgYGANCiNDdW11bGF0aXZlIHN1bSBHUFAgY29udHJvbCBzaWRlIHBvc3QgY29tcG9zdCBhcHBsaWNhdGlvbiB3aXRoIENJJ3MNCg0KYGBge3J9DQoNCiNHUFAgQ3Vtc3VtDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfbWVhbiwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KI2NvbXBhcmlzb24gb2YgR1BQIGN1bSBzdW0gdXNpbmcgcmVjbyBwcmVkaWN0DQoNCiNtYWtpbmcgdGhlIGNvbXBhcmlzb24gdmFyaWFibGUNCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfd2l0aF9wcmVkX1JlY28gPC0gKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkTkVFX2ZpbGxlZF9jb250cm9sX21lYW4gLSBhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJFJFQ09fcHJlZGljdF9jb250cm9sX21lYW4pDQoNCg0KI2N1bXN1bSB0aGUgY29tcGFyaXNvbiB2YXJpYWJsZQ0KY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF9jb250cm9sX3dpdGhfcHJlZF9SZWNvLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2xvd2VyIGJvdW5kIENJDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfcTAyNSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KI3VwcGVyIGJvdW5kIENJDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX2NvbnRyb2xfcTk3NSAsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQpgYGANCg0KDQoNCg0KI0N1bWxhdGl2ZSBzdW0gUmVjbyBUcmVhdG1lbnQgc2lkZSBwcmUgY29tcG9zdCBhcHBsaWNhdGlvbiB3aXRoIENJJ3MNCg0KYGBge3J9DQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4sDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KDQoNCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfcTAyNSwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KDQoNCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJFJFQ09fcHJlZGljdF90cmVhdG1lbnRfcTk3NSAsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcHJlX2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KYGBgDQoNCiNDdW1sYXRpdmUgc3VtIEdQUCB0cmVhdG1lbnQgc2lkZSBwcmUgY29tcG9zdCBhcHBsaWNhdGlvbiB3aXRoIENJJ3MNCg0KYGBge3J9DQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wcmVfZGF0YSRHUFBfdHJlYXRtZW50X21lYW4gLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQoNCg0KY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX3RyZWF0bWVudF9xMDI1LA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3ByZV9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQoNCg0KY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcHJlX2RhdGEkR1BQX3RyZWF0bWVudF9xOTc1ICwNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wcmVfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KYGBgDQoNCg0KI0N1bWxhdGl2ZSBzdW0gUmVjbyBUcmVhdG1lbnQgc2lkZSBwb3N0IGNvbXBvc3QgYXBwbGljYXRpb24gd2l0aCBDSSdzDQpgYGB7cn0NCg0KI1JlY28gQ3Vtc3VtDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9tZWFuLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KDQoNCg0KI2xvd2VyIGJvdW5kIENJDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUkVDT19wcmVkaWN0X3RyZWF0bWVudF9xMDI1LA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KDQojdXBwZXIgYm91bmQgQ0kNCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X3E5NzUgLA0KICAgICAgICAgICAgcm91bmQoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSREb3lfd2F0ZXIgKSwNCiAgICAgICAgICAgIGZ1bmN0aW9uKHgpIG1lYW4oeCxuYS5ybT1UKSkpKjEyLzEwMDAwMDAqMTgwMCo0OA0KYGBgDQojQ3VtdWxhdGl2ZSBzdW0gR1BQIHRyZWFtZW50IHNpZGUgcG9zdCBjb21wb3N0IGFwcGxpY2F0aW9uIHdpdGggQ0kncw0KDQpgYGB7cn0NCg0KI0dQUCBDdW1zdW0NCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X21lYW4sDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQoNCg0KIyMjIyMjIyNHUFAgY29tcGFyaXNvbiB1c2luZyBSZWNvX3ByZWRpY3QjIyMjIyMNCg0KI21ha2luZyB0aGUgY29tcGFyaXNvbiBHUFAgdmFyaWFibGUNCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF93aXRoX3ByZWRfUmVjbyA8LSAoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRORUVfZmlsbGVkX3RyZWF0bWVudF9tZWFuIC0gYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRSRUNPX3ByZWRpY3RfdHJlYXRtZW50X21lYW4pDQoNCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF93aXRoX3ByZWRfUmVjbyBbKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkUmcgPD0gMTAgKV08LTANCg0KDQpjdW1zdW0odGFwcGx5KGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkR1BQX3RyZWF0bWVudF93aXRoX3ByZWRfUmVjbywNCiAgICAgICAgICAgIHJvdW5kKGFsbF9kYXRhJGFsbF9wb3N0X2RhdGEkRG95X3dhdGVyICksDQogICAgICAgICAgICBmdW5jdGlvbih4KSBtZWFuKHgsbmEucm09VCkpKSoxMi8xMDAwMDAwKjE4MDAqNDgNCg0KI2Vzc2VudGlhbGx5IHRoZSBzYW1lLiAtMzg3LjczIHdpdGggdGhpcyB2LnMgLTM4Ny42Ng0KDQojbG93ZXIgYm91bmQgQ0kNCmN1bXN1bSh0YXBwbHkoYWxsX2RhdGEkYWxsX3Bvc3RfZGF0YSRHUFBfdHJlYXRtZW50X3EwMjUsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQoNCiN1cHBlciBib3VuZCBDSQ0KY3Vtc3VtKHRhcHBseShhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJEdQUF90cmVhdG1lbnRfcTk3NSAsDQogICAgICAgICAgICByb3VuZChhbGxfZGF0YSRhbGxfcG9zdF9kYXRhJERveV93YXRlciApLA0KICAgICAgICAgICAgZnVuY3Rpb24oeCkgbWVhbih4LG5hLnJtPVQpKSkqMTIvMTAwMDAwMCoxODAwKjQ4DQpgYGANCg0KDQpgYGB7cn0NCmFsbF9kYXRhJGFsbF9wcmVfZGF0YQ0Kd3JpdGUuY3N2KA0KICBhbGxfZGF0YSRhbGxfcHJlX2RhdGEsDQogIHBhc3RlMChvdXQucGF0aCwgU3lzLkRhdGUoKSwgIl9hbGxfcHJlX2NvbXBvc3RfZGF0YS5jc3YiKSwNCiAgcXVvdGUgPSBULA0KICByb3cubmFtZXMgPSBGDQopDQoNCmFsbF9kYXRhJGFsbF9wb3N0X2RhdGENCndyaXRlLmNzdigNCiAgYWxsX2RhdGEkYWxsX3ByZV9kYXRhLA0KICBwYXN0ZTAob3V0LnBhdGgsIFN5cy5EYXRlKCksICJfYWxsX3Bvc3RfY29tcG9zdF9kYXRhLmNzdiIpLA0KICBxdW90ZSA9IFQsDQogIHJvdy5uYW1lcyA9IEYNCikNCmBgYA0KDQoNCg==